如何在Python 2.7中打开以空格或其他分隔符的文本文件?
我有一个我认为是用空格分隔的文本文件,我想打开它并把一些数据复制到列表里(使用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))
我哪里做错了呢?
4 个回答
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])
如果你只想抓取整数,而不想要小数,可以使用这个方法。
0
你可以使用正则表达式找到你需要的所有值。
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
一个替代的方法是利用内置的 str.split()
函数:
a, b, c, d, e = zip(*((map(float, line.split()) for line in open('data_file.txt'))))
0
问题在于字段(列)之间有多个空格。
CSV是“逗号分隔值”的意思。想象一下,如果你用逗号代替空格,你文件的第一行看起来会是这样的:
,,,,0.000000,,,,,,,11.00,,,,,,737.09,,,,,,,1.00,,,,,1116.00
这样,CSV读取器就会在这一行中看到超过5个字段(列)。
你有两个选择:
- 改用单个空格作为分隔符
- 使用简单的split()来处理多个空白字符:
:
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))
附注:一旦这部分工作正常,你会遇到一个问题,就是在像“11.00”这样的字符串上调用int(),因为它们并不是真正的整数。所以我建议使用类似这样的方式:
int(float(b))