19

我有一个制表符分隔的 .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

4 回答 4

34

首先,您将其加载到字典中,而字典不会获取您想要的列表列表。

使用 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 数组)。

于 2013-06-08T11:21:18.270 回答
4

尝试这个:

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)
于 2013-06-07T17:27:36.810 回答
1

使用熊猫库:-

import pandas as pd
dataset = pd.read_csv(path,delimiter="\t")
dataset.iloc[0,2]
于 2020-07-15T04:56:18.300 回答
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()))])
于 2018-09-04T18:01:32.350 回答