如何使用loadtxt在python中的相同数组中加载多个文件?

时间:2012-11-09 04:13:32

标签: python arrays numpy

我有几个表格文件,我用它们加载:

x, y, rho, phi = np.loadtxt(myfile, unpack=True)

现在,考虑我的myfile1myfile2具有相同格式的情况。如何在相同的数组中加载它们(好像有一个文件)?

2 个答案:

答案 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.GzipFilebz2.BZ2File替换为上面的open即可。

但是如果你需要处理可能的压缩文件,你必须进行numpy所做的相同扩展检查,然后创建适当的对象(写一个{{1}包装它的功能),此时这会顽固地坚持错误的解决方案。所以,如果这是一个问题,我可能会单独加载它们然后执行open_compressed

答案 1 :(得分:4)

您可以使用标准文件输入模块:

import fileinput
import glob
import numpy as np
data = np.loadtxt(fileinput.input(glob.glob("*.dat")))