Python:将多个文件中的数据读入2D numpy数组或列表的方法
我有Python:将多个文件中的数据读入2D numpy数组或列表的方法,python,arrays,list,numpy,Python,Arrays,List,Numpy,我有n个文件,我想从每个文件中特定行的m个列中读取数据。我想以nbym列表或数组结束,其中列表或数组的每一行都是其中一个文件中的一行。这样做的方法是什么?或者这是最好的方法?我可以定义m不同的列表或数组(每个列表或数组的名称相似,可能只是通过数字索引),但处理几个不同的列表或数组通常比处理一个二维列表或数组更加困难和复杂 例如 file_names = ( "file1" "file2" "file3" "file4" ) # so in this case n is 4 for name in
n
个文件,我想从每个文件中特定行的m
个列中读取数据。我想以n
bym
列表或数组结束,其中列表或数组的每一行都是其中一个文件中的一行。这样做的方法是什么?或者这是最好的方法?我可以定义m
不同的列表或数组(每个列表或数组的名称相似,可能只是通过数字索引),但处理几个不同的列表或数组通常比处理一个二维列表或数组更加困难和复杂
例如
file_names = ( "file1" "file2" "file3" "file4" ) # so in this case n is 4
for name in file_names do:
### somehow save the m columns as a row in an array or list
print resulting_list_or_array
一些可能相关的注释:我想从文件中读取的m
列不是文件中的第一列m
(假设我需要跳过skip_num
列,我确实知道n
和m
是什么
另外,我想读的行不是第一行,而是
row_num
行。您的问题似乎定义得很清楚
result = []
file_names = ("file1", "file2", "file3", "file4")
for name in file_names do:
f = open(name)
for i, line in enumerate(f):
if i == 122: # note this will be line_no + 1
data = line.strip().split()
result.append([data[0], data[5], data[6], data[9]])
print result # a dynamically created 2D array
您可以使用内置模块
glob
和numpy.genfromtxt
生成通用代码,如下例所示,其中许多test*.txt
文件的第二行将在末尾构建一个二维数组:
from glob import glob
import numpy as np
def read(fname, skip_header=1):
with open(fname) as f:
for i in range(skip_header):
f.next()
return f.next()
a = np.genfromtxt((read(fname) for fname in glob('test*.txt')))
如果我想阅读不是第一行的特定行怎么办?我编辑了上面的问题以反映这一点。这就是
enumerate
和if
语句所做的。如果m
是40怎么办?在您以result.append开头的行中,具体列出每个元素会很麻烦。Would类似于result.append([data[skip_num:skip_num+m]])
work?是不是glob
通常与Python一起安装的标准模块(比如,如果我在Linux机器上用Python运行从glob导入glob
,它最有可能工作)或者我必须自己安装吗?@Joshua是的…glob
是一个标准模块…你试过这个答案了吗?还没有。如果我想读取文件中的特定行,我是否只需要循环f.next()
到达该行所需的次数?@Joshua正确……我已将答案编辑得更为笼统,使用了与numpy.genfromtxt相同的术语