我认为我想要打开一个空格分隔的文本文件,并将一些数据复制到列表中(Python 2.7)。这是数据文件的片段:
0.000000 11.00 737.09 1.00 1116.00
0.001000 14.00 669.29 10.00 613.70
0.002000 15.00 962.27 2.00 623.50
0.003000 7.00 880.86 7.00 800.71
0.004000 9.00 634.67 3.00 1045.00
0.005000 12.00 614.67 3.00 913.33
0.006000 12.00 782.58 6.00 841.00
0.007000 13.00 860.08 6.00 354.00
0.008000 14.00 541.07 4.00 665.25
0.009000 14.00 763.00 6.00 1063.00
0.010000 9.00 790.33 6.00 857.83
0.011000 6.00 899.83 4.00 1070.75
0.012000 16.00 710.88 10.00 809.90
0.013000 12.00 863.50 7.00 923.14
0.014000 9.00 591.67 6.00 633.17
0.015000 12.00 740.58 6.00 837.00
0.016000 10.00 727.60 7.00 758.00
0.017000 12.00 838.75 4.00 638.75
0.018000 9.00 991.33 7.00 731.57
0.019000 12.00 680.75 5.00 1079.40
0.020000 15.00 843.20 3.00 546.00
0.021000 11.00 795.18 5.00 1317.20
0.022000 9.00 943.33 5.00 911.00
0.023000 13.00 711.23 3.00 981.67
0.024000 11.00 922.73 5.00 1111.00
0.025000 1112.00 683.58 6.00 542.83
0.026000 15.00 1053.80 5.00 1144.40
以下是我尝试过的代码,但不起作用。我想有两个列表,分别来自第二和第四列。
listb = []
listd = []
with open('data_file.txt', 'r') as file:
reader = csv.reader(file,delimiter=' ')
for a,b,c,d,e in reader:
listb.append(int(b))
listd.append(int(d))
我做错了什么?
答案 0 :(得分:2)
另一种方法是利用内置的str.split()
:
a, b, c, d, e = zip(*((map(float, line.split()) for line in open('data_file.txt'))))
答案 1 :(得分:0)
您可以使用regexp
找到所需的所有值import re
list_b = []
list_d = []
with open('C://data_file.txt', 'r') as f:
for line in f:
list_line = re.findall(r"[\d.\d+']+", line)
list_b.append(float(list_line[1])) #appends second column
list_d.append(float(list_line[3])) #appends fourth column
print list_b
print list_d
答案 2 :(得分:0)
问题是字段(列)之间的多个空格。
CSV代表以逗号分隔的值。想象一下你使用逗号而不是空格。您文件中的第1行将如下所示:
,,,,0.000000,,,,,,,11.00,,,,,,737.09,,,,,,,1.00,,,,,1116.00
因此,CSV阅读器会在该行中看到超过5个字段(列)。
您有两种选择:
listb = []
listd = []
with open('text', 'r') as file:
for row in file:
a, b, c, d, e = row.split()
listb.append(int(b))
listd.append(int(d))
P.S:一旦这部分工作,你将遇到一个问题调用int()的字符串,如" 11.00"这不是真正的整数。 所以我建议使用类似的东西:
int(float(b))
答案 3 :(得分:0)
f=open("input.txt",'r')
x=f.readlines()
list1=[]
list2=[]
import re
for line in x:
pattern=re.compile(r"(\d+)(?=\.)")
li=pattern.findall(line)
list1.append(li[1])
list2.append(li[3])
如果您只想捕获integers
而不是floats
,则可以使用此功能。