在 python 2.7 中打开一个空格(?)分隔的文本文件?
Posted
技术标签:
【中文标题】在 python 2.7 中打开一个空格(?)分隔的文本文件?【英文标题】:Opening a space(?) delimited text file in python 2.7? 【发布时间】:2014-11-03 15:51:11 【问题描述】:我有一个我认为是空格分隔的文本文件,我想打开它并将其中的一些数据复制到列表中(Python 2.7)。这是数据文件的sn-p:
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))
我做错了什么?
【问题讨论】:
那个文件好像是由制表符分隔的文件数据。 【参考方案1】:您可以使用正则表达式找到您需要的所有值
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
【讨论】:
有没有办法修改它以附加为整数,以避免之后必须遍历列表来更改类型?编辑:做 list_b.append(float(list_line[1])) 有效,而 list_b.append(int(list_line[1])) 无效。 @JohnCrow 附加为整数意味着您想丢失小数点后的数字?【参考方案2】: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
,则可以使用它。
【讨论】:
【参考方案3】:问题是字段(列)之间的多个空格。
CSV 代表逗号分隔值。想象一下,您使用的是逗号而不是空格。文件中的第 1 行将如下所示:
,,,,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))
P.S:一旦这部分工作,你会遇到一个问题,调用 int() 像 "11.00" 这样的字符串不是真正的整数。 所以我建议使用类似的东西:
int(float(b))
【讨论】:
【参考方案4】:另一种选择是利用内置的str.split()
:
a, b, c, d, e = zip(*((map(float, line.split()) for line in open('data_file.txt'))))
【讨论】:
以上是关于在 python 2.7 中打开一个空格(?)分隔的文本文件?的主要内容,如果未能解决你的问题,请参考以下文章
如何在python中动态地读取用空格分隔的输入,最好是在List上读取不同类型的数据?