我有几个表格文件,我用它们加载:
x, y, rho, phi = np.loadtxt(myfile, unpack=True)
现在,考虑我的myfile1
和myfile2
具有相同格式的情况。如何在相同的数组中加载它们(好像有一个文件)?
答案 0 :(得分:4)
有多种方法可以做到这一点(例如,您可以加载两个数组,然后通过x = numpy.concatenate((x1, x2))
连接它们等),但我要做的是动态连接文件,并传递结果到loadtxt
。
正如the documentation所说,fname
可以是:
要读取的文件,文件名或生成器。如果文件扩展名为.gz或.bz2,则首先解压缩该文件。请注意,生成器应返回Python 3k的字节字符串。
所以,你只需要一个生成myfile1的生成器,然后生成myfile2。
显而易见的方法是使用itertools
:
with open(myfile1, 'rb') as f1, open(myfile2, 'rb') as f2:
x, y, rho, phi = numpy.loadtxt(itertools.chain(f1, f2))
你可能会注意到我离开了unpack=True
。那是因为unpack
仅在传递文件名而不是文件对象或生成器时才有效。 (它查看扩展名,而不是文件魔术或任何花哨的东西。)
如果您知道文件始终是gzip或bzip2文件,则只需将gzip.GzipFile
或bz2.BZ2File
替换为上面的open
即可。
但是如果你需要处理可能的压缩文件,你必须进行numpy
所做的相同扩展检查,然后创建适当的对象(写一个{{1}包装它的功能),此时这会顽固地坚持错误的解决方案。所以,如果这是一个问题,我可能会单独加载它们然后执行open_compressed
。
答案 1 :(得分:4)
您可以使用标准文件输入模块:
import fileinput
import glob
import numpy as np
data = np.loadtxt(fileinput.input(glob.glob("*.dat")))