这个问题很简单,但是我从几小时起就没有完成它:我有一个数据文件,它包含两列数据,由一个标签分隔。我想用python阅读和处理它们。 allData
包含数据,但我如何访问部分数据?
with open( "file.txt", "r" ) as mergeData:
allData = mergeData.read()
print allData
答案 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或字符串交换分隔符。