打开空间(?)Python2.7中的分隔文本文件?

2024-04-19 08:41:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个空格分隔的文本文件,我想打开它并将一些数据复制到列表中(Python2.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))  

我做错什么了?


Tags: 数据代码列表数据文件withopenreaderfile
3条回答

另一种选择是利用内置的str.split()

a, b, c, d, e = zip(*((map(float, line.split()) for line in open('data_file.txt'))))

问题是字段(列)之间有多个空格。

CSV代表逗号分隔的值。想象一下你用逗号代替空格。文件中的第1行看起来像:

,,,,0.000000,,,,,,,11.00,,,,,,737.09,,,,,,,1.00,,,,,1116.00

因此,CSV阅读器在该行中看到5个以上的字段(列)。

你有两个选择:

  1. 切换到使用单空格分隔符
  2. 使用简单的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:一旦这一部分开始工作,在“11.00”等不是真正整数的字符串上调用int()就会遇到问题。 因此,我建议使用如下方法:

int(float(b))
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,则可以使用此选项。

相关问题 更多 >