使用 numpy 读取 txt 文件时跳过包含字符串的结尾行以生成数字数组

发布于 2024-12-12 10:09:19 字数 489 浏览 0 评论 0原文

我正在尝试生成一个从互联网读取文本文件的数组。

我的目标是使用 Python 而不是 MATLAB,来替换 MATLAB 中的这一步:

url=['http://www.cdc.noaa.gov/Correlation/amon.us.long.data'];
urlwrite(url,'file.txt');

我正在使用以下代码:

urllib.urlretrieve('http://www.cdc.noaa.gov/Correlation/amon.us.long.data', '/Users/epy/file2.txt')
a = np.loadtxt('/Users/epy/file2.txt', skiprows=1, dtype=None)

但由于文件末尾的文本描述而失败。

你知道是否存在一种方法可以跳过末尾的 X 行,或者我必须使用某种字符串操作(readlines?)?

I'm trying to generate an array reading a text file from internet.

My target is to use Python instead of MATLAB, to replace this step in MATLAB:

url=['http://www.cdc.noaa.gov/Correlation/amon.us.long.data'];
urlwrite(url,'file.txt');

I'm using this code:

urllib.urlretrieve('http://www.cdc.noaa.gov/Correlation/amon.us.long.data', '/Users/epy/file2.txt')
a = np.loadtxt('/Users/epy/file2.txt', skiprows=1, dtype=None)

But it fails because of the text description at the end of the file.

Do you know if exist a way to skip the X lines at the end, or I have to use some sort of string manipulation (readlines?) instead?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

ぺ禁宫浮华殁 2024-12-19 10:09:19

对于更复杂的文本加载,请查看 numpy.genfromtxt

它比 numpy.loadtxt 慢,但更灵活。

在你的情况下(我避免在这里保存临时文件......):

import numpy as np
import urllib2

url = 'http://www.cdc.noaa.gov/Correlation/amon.us.long.data'
data = np.genfromtxt(urllib2.urlopen(url), skip_header=1, skip_footer=4)

For more complex text loading, have a look at numpy.genfromtxt.

It's slower than numpy.loadtxt but more flexible.

In your case (I'm avoiding saving a temporary file here...):

import numpy as np
import urllib2

url = 'http://www.cdc.noaa.gov/Correlation/amon.us.long.data'
data = np.genfromtxt(urllib2.urlopen(url), skip_header=1, skip_footer=4)
罪#恶を代价 2024-12-19 10:09:19

对于那些曾经来这里的人来说,它更容易(np.loadtxt也可以得到生成器):

而不是

a = np.loadtxt('/Users/epy/file2.txt', skiprows=1, dtype=None)

仅仅写入

a = np.loadtxt(open('/Users/epy/file2.txt','rt').readlines()[:-1]), skiprows=1, dtype=None)

也会跳过最后一行

for who ever come here thoes days, its alot easier(np.loadtxt can also get generator):

instead of

a = np.loadtxt('/Users/epy/file2.txt', skiprows=1, dtype=None)

just write

a = np.loadtxt(open('/Users/epy/file2.txt','rt').readlines()[:-1]), skiprows=1, dtype=None)

will also skip last line

柠檬色的秋千 2024-12-19 10:09:19

这确实应该是回答riddleculous 评论的评论。但我还没有赢得这个特权。

截至今天,使用 jackonsl 的解决方案

a = np.loadtxt(open(file,'rt').readlines()[:-1],skiprows=1,dtype=None)

np.genfromtext 快约 30%

比使用 137 个文件,每个文件约 500 行。

This really should be a comment answering riddleculous's comment. But I haven't earned the privilege.

As per today, using jack onsl's solution with

a = np.loadtxt(open(file,'rt').readlines()[:-1], skiprows=1, dtype=None)

is about 30% faster than using np.genfromtext

Using 137 files with around 500 lines in each.

怪我闹别瞎闹 2024-12-19 10:09:19

我想指出 @jackonsl 答案中的一个拼写错误。
删除 [:-1] 之后的一个多余的括号会产生:

a = np.loadtxt(open('/Users/epy/file2.txt','rt').readlines()[:-1], skiprows=1, dtype=None)

否则,我可以确认这在 numpy 版本 1.21.5 中有效。

I want to point out a typo in @jack onsl's answer.
Removing one superfluous parentheses after [:-1] yields:

a = np.loadtxt(open('/Users/epy/file2.txt','rt').readlines()[:-1], skiprows=1, dtype=None)

Otherwise, I can confirm that this works in numpy version 1.21.5.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文