0

这个问题非常简单,但我从几个小时以来就没有完成它:我有一个数据文件,其中包含两列数据,由一个选项卡分隔。我想用python阅读和处理它们。allData包含数据,但我如何访问其中的一部分?

with open( "file.txt", "r" ) as mergeData:
    allData = mergeData.read()

print allData
4

4 回答 4

3

最灵活的方法是使用csv模块

import csv
with open("file.txt", "rb") as infile:
    reader = csv.reader(infile, delimiter="\t")
    allData = list(reader)

请注意,所有元素都是字符串。如果您想将第一列转换为 anint并将第二列转换为 a float,您可以执行类似的操作

    allData = [(int(first), float(second)) for first,second in reader]

要将其拆分为两个浮点数列表,每列一个,zip()请与元组解包运算符 ( *) 一起使用:

    first, second = zip(*((float(x), float(y)) for x,y in reader))
于 2013-09-27T20:19:50.157 回答
2

简短而简单:

with open( "file.txt", "r" ) as mergeData:
     allData = [line.strip().split('\t') for line in mergeData]

csv@TimPietzcker 提到的模块很好,但不处理 unicode。

于 2013-09-27T20:23:58.927 回答
-1

csv模块是读取分隔数据字段文件的不错选择。下面创建一个列表列表,每个列表都会包含从数据文件中对应列读取的数据。它也可以很容易地适应任意数量的数据列:

import csv

NUM_COLS = 2
columns = [[] for _ in range(NUM_COLS)]
with open("datafile.txt", "rb") as infile:
    for row in csv.reader(infile, delimiter="\t"):
        for i, col in enumerate(row):
            columns[i].append(col)

for col in columns:
    print col

示例制表符分隔的输入文件:

1   5
2   6
3   7
4   8

产生的输出:

['1', '2', '3', '4']
['5', '6', '7', '8']
于 2013-09-27T21:19:22.810 回答
-2

为什么不:

fp = open("file.txt","r")
mylist = fp.readlines()   # get list of lines.
fp.close()  # i forgot that line [EDIT]
for i in range(len(mylist)):
    mylist[i] = mylist[i].strip()   #get rid of ' ' and '\n' and such
    mylist[i] = mylist[i].split('separator') # splits line into list of elements in the line

mylist 然后应该是您的行和每行中的单个元素的二维数组/列表。然后分隔符应与分隔线元素的字符或字符串交换。

于 2013-09-27T20:23:38.950 回答