使用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?)呢?
4 个回答
1
这其实应该是对riddleculous评论的一个回复,但我还没有这个资格。
根据今天的情况,使用jack onsl的解决方案,代码如下:
a = np.loadtxt(open(file,'rt').readlines()[:-1], skiprows=1, dtype=None)
这个方法比使用np.genfromtext
快大约30%。
这里用的是137个文件,每个文件大约有500行。
2
对于那些最近来到这里的人来说,这个方法简单多了(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)
这样也会跳过最后一行
11
如果你需要加载更复杂的文本数据,可以看看 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)