我有一个制表符分隔的.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:]
它稍微做了我需要做的事情,但不是我的目标。我想完成我可以输入打印的代码(d [0,3]),它会吐出248。
答案 0 :(得分:25)
首先,您将它加载到字典中,这不会获得您想要的列表列表。
使用CSV模块生成如下列表列表非常简单:
import csv
with open(path) as f:
reader = csv.reader(f, delimiter="\t")
d = list(reader)
print d[0][2] # 248
这会给你一个字符串列表列表,所以如果你想获得数字,你必须转换为int。
也就是说,如果你有一个大型数组(或正在进行任何类型的数值计算),你应该考虑使用NumPy或pandas之类的东西。如果你想使用NumPy,你可以做
import numpy as np
d = np.loadtxt(path, delimiter="\t")
print d[0,2] # 248
作为奖励,NumPy阵列允许您进行快速矢量/矩阵操作。 (另请注意,d[0][2]
也适用于NumPy数组。)
答案 1 :(得分:3)
试试这个:
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)
答案 2 :(得分:1)
使用熊猫库:-
import pandas as pd
dataset = pd.read_csv(path,delimiter="\t")
dataset.iloc[0,2]
答案 3 :(得分:0)
不确定如何使print(d[0,3])
输出248,但这将使print(d[0][3])
输出248。第一个StackOverflow答案是IDK如何显示我的代码块中的最后两行实际上只是一条长行。
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()))])