使用python将数据文件读取到数组

时间:2013-09-27 20:17:25

标签: python

这个问题很简单,但是我从几小时起就没有完成它:我有一个数据文件,它包含两列数据,由一个标签分隔。我想用python阅读和处理它们。 allData包含数据,但我如何访问部分数据?

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

print allData

4 个答案:

答案 0 :(得分:3)

最灵活的方法是使用csv module

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

请注意,所有元素都是字符串。如果您想将第一列转换为int而将第二列转换为float,则可以执行类似

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

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

    first, second = zip(*((float(x), float(y)) for x,y in reader))

答案 1 :(得分:2)

简短而简单:

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

csv模块很好但不处理unicode。

答案 2 :(得分:-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']

答案 3 :(得分:-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应该是每行中的行和单个元素的2D数组/列表。 然后,应使用分隔行元素的char或字符串交换分隔符。