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

20

我有一个以制表符分隔的.txt文件,我正在尝试将其导入到Python中的矩阵数组中,并保持与文本文件相同的格式,如下所示:

123088 266 248 244 266 244 277

123425 275 244 241 289 248 231

123540 156 654 189 354 156 987

注意,上述内容还有许多行(大约200行),我想将它们传递到Python中,并在创建矩阵数组时保持相同的格式。

我目前用于此的代码是:

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:]

它稍微做到了我需要的,但没有达到我的目标。我想完成一段代码,我可以输入print(d[0,3]),然后它会输出248。

4个回答

36
首先,你正在将其加载到字典中,这不会得到你想要的列表。使用CSV模块生成以下列表非常简单:
import csv
with open(path) as f:
    reader = csv.reader(f, delimiter="\t")
    d = list(reader)
print d[0][2] # 248

这将给您一个字符串列表的列表,因此如果您想要获取数字,您需要转换为int类型。

话虽如此,如果您有一个大数组(或正在进行任何类型的数值计算),您应该考虑使用类似于NumPypandas的东西。 如果您想使用NumPy,则可以执行以下操作:

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

作为优点,NumPy数组允许您快速进行矢量/矩阵操作。(此外,请注意d [0] [2]也适用于NumPy数组)。


жңүжІЎжңүеҠһжі•и®©np.loadtxtеӨ„зҗҶж—ўеҢ…еҗ«ж•°еӯ—еҸҲеҢ…еҗ«ж–Үжң¬зҡ„ж–Ү件пјҹ - Cape Code
2
@CapeCode 那时我会转而使用pandas,它会自动处理它。你也可以使用 converters 关键字参数,但最终会得到一个对象dtype数组。 - Jeff Tratner

5

试试这个:

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

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

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

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

for line in d:
    print "\t".join(line)

1
谢谢,那个方法很好用!但是如果我输入print(d),我会得到一个非常拼接的列表。我该如何让代码返回一个像上面数据一样有定义列的列表呢? - Harley
你能否提供一下你的结果和期望的结果的例子?print(d)或者print d应该会输出完整的列表。你原始文件中的每一行都将是一个值列表,这些列表将被添加到d中,而d本身也是一个列表。 - jsucsy
如果您只想以与原始输入相同的格式输出,请参阅上面的编辑 - jsucsy

1
使用Pandas库:-
import pandas as pd
dataset = pd.read_csv(path,delimiter="\t")
dataset.iloc[0,2]

0
不确定如何使print(d[0,3])输出248,但这将使print(d[0][3])输出248。这是我在StackOverflow上的第一个答案,所以我不知道如何展示代码块中的最后两行实际上只是一行长代码。
import csv

Text_Input = r"<.txt file>"  
listoflists= []

with open(Text_Input) as txtfile:
    reader = csv.reader(txtfile)

    for row in reader:
        listoflists.append([int(row[0].split()[i]) for i in 
        range(len(row[0].split()))])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接