使用loadtxt缩写导入多个文件(Python)

时间:2014-03-16 01:31:28

标签: python-2.7 numpy import load concatenation

我想缩写我用loadtxt导入多个文件的方式,我会做下一个:

rc1    =loadtxt("20120701_Gp_xr_5m.txt", skiprows=19)
rc2    =loadtxt("20120702_Gp_xr_5m.txt", skiprows=19)
rc3    =loadtxt("20120703_Gp_xr_5m.txt", skiprows=19)
rc4    =loadtxt("20120704_Gp_xr_5m.txt", skiprows=19)
rc5    =loadtxt("20120705_Gp_xr_5m.txt", skiprows=19)
rc6    =loadtxt("20120706_Gp_xr_5m.txt", skiprows=19)
rc7    =loadtxt("20120707_Gp_xr_5m.txt", skiprows=19)
rc8    =loadtxt("20120708_Gp_xr_5m.txt", skiprows=19)
rc9    =loadtxt("20120709_Gp_xr_5m.txt", skiprows=19)
rc10   =loadtxt("20120710_Gp_xr_5m.txt", skiprows=19)

然后我使用以下方法连接它们:

GOES   =concatenate((rc1,rc2,rc3,rc4,rc5,rc6,rc7,rc8,rc9,
                     rc10),axis=0)

但我的问题是:我想减少所有这些吗?也许有FOR或类似的东西。由于文件是日期(字符串)的保证。

我在考虑做这样的事情

day = ####我不知道如何定义从01到31的字符串,例如

data="201207"+day+"_Gp_xr_5m.txt"

然后这样做,但我认为不正确

GOES=loadtxt(data, skiprows=19)

1 个答案:

答案 0 :(得分:6)

是的,您可以轻松地使用for循环或具有等效列表推导的子数组。使用glob module获取所需的文件名:

import numpy as np  # you probably don't need this line
from glob import glob

fnames = glob('path/to/dir')
arrays = [np.loadtxt(f, skiprows=19) for f in fnames]
final_array = np.concatenate(arrays)

如果内存使用成为问题,您还可以iterate over all files line by line by chaining them并将该生成器提供给np.loadtxt


OP的评论后

编辑

glob的示例不太清楚..

您可以使用“通配符”*来匹配文件,例如glob('*')获取当前目录中所有文件的列表。因此,上面代码的一部分可以更好地编写为:

fnames = glob('path/to/dir/201207*_Gp_xr_5m.txt')

或者,如果您的程序已从正确的目录运行:

fnames = glob('201207*_Gp_xr_5m.txt')

我之前忘记了这一点,但你也应该对文件名列表进行排序,因为glob的文件名列表不能保证排序。

fnames.sort()

稍微不同的方法,更多的是你所想的方向如下。当变量day包含日期编号时,您可以将其放在文件名中,如下所示:

daystr = str(day).zfill(2)
fname = '201207' + daystr + '_Gp_xr_5m.txt'

或使用聪明的格式说明符:

fname = '201207{:02}_Gp_xr_5m.txt'.format(day)

或“旧”方式:

fname = '201207%02i_Gp_xr_5m.txt' % day

然后在for - 循环中使用它:

arrays = []
for day in range(1, 32):
    daystr = str(day).zfill(2)
    fname = '201207' + daystr + '_Gp_xr_5m.txt'
    a = np.loadtxt(fname, skiprows=19)
    arrays.append(a)

final_array = np.concatenate(arrays)