将大型制表符分隔的.txt文件导入Python

use*_*402 13 python csv arrays list tab-delimited

我有一个制表符分隔的.txt文件,我试图导入Python中的矩阵数组,格式与文本文件相同,如下所示:

123088 266 248 244 266 244 277

123425 275 244 241 289 248 231

123540 156 654 189 354 156 987

请注意,我想要传递给Python并在从中创建矩阵数组时保持相同的格式,上面有很多很多行(大约200个).

我对此的当前代码是:

d = {}
with open('file name', 'rb') as csv_file:
    csv_reader = csv.reader(csv_file, delimiter='\t')
    for row in csv_reader:
        d[row[0]] = row[1:]
Run Code Online (Sandbox Code Playgroud)

它稍微做了我需要做的事情,但不是我的目标.我想完成我可以输入打印的代码(d [0,3]),它会吐出248.

Jef*_*ner 27

首先,您将它加载到字典中,这不会获得您想要的列表列表.

使用CSV模块生成如下列表列表非常简单:

import csv
with open(path) as f:
    reader = csv.reader(f, delimiter="\t")
    d = list(reader)
print d[0][2] # 248
Run Code Online (Sandbox Code Playgroud)

这会给你一个字符串列表列表,所以如果你想获得数字,你必须转换为int.

也就是说,如果你有一个大型数组(或进行任何类型的数值计算),你应该考虑使用NumPypandas之类的东西.如果你想使用NumPy,你可以这样做

import numpy as np
d = np.loadtxt(path, delimiter="\t")
print d[0,2] # 248
Run Code Online (Sandbox Code Playgroud)

作为奖励,NumPy阵列允许您进行快速矢量/矩阵操作.(另请注意,这d[0][2]也适用于NumPy数组).

  • @CapeCode那时我会转而使用pandas,它会自动处理它。您还可以使用“converters”关键字参数,但最终会得到一个对象数据类型数组。 (2认同)

jsu*_*csy 5

尝试这个:

d = []
with open(sourcefile,'rb') as source:
    for line in source:
        fields = line.split('\t')
        d.append(fields)
Run Code Online (Sandbox Code Playgroud)

print d[0][1]将打印 266。

print d[0][2](记住你的数组是从 0 开始的)将打印 248。

要以与输入相同的格式输出数据:

for line in d:
    print "\t".join(line)
Run Code Online (Sandbox Code Playgroud)