使用 numpy 读取 txt 文件时跳过包含字符串的结尾行以生成数字数组
我正在尝试生成一个从互联网读取文本文件的数组。
我的目标是使用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
对于更复杂的文本加载,请查看
numpy.genfromtxt
。它比 numpy.loadtxt 慢,但更灵活。
在你的情况下(我避免在这里保存临时文件......):
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...):
对于那些曾经来这里的人来说,它更容易(np.loadtxt也可以得到生成器):
而不是
仅仅写入
也会跳过最后一行
for who ever come here thoes days, its alot easier(np.loadtxt can also get generator):
instead of
just write
will also skip last line
这确实应该是回答riddleculous 评论的评论。但我还没有赢得这个特权。
截至今天,使用 jackonsl 的解决方案
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
is about 30% faster than using
np.genfromtext
Using 137 files with around 500 lines in each.
我想指出 @jackonsl 答案中的一个拼写错误。
删除
[:-1]
之后的一个多余的括号会产生:否则,我可以确认这在 numpy 版本 1.21.5 中有效。
I want to point out a typo in @jack onsl's answer.
Removing one superfluous parentheses after
[:-1]
yields:Otherwise, I can confirm that this works in numpy version 1.21.5.