在python 2.7中打开一个空格(?)分隔的文本文件?

时间:2014-09-10 05:30:10

标签: python list python-2.7 csv

我认为我想要打开一个空格分隔的文本文件,并将一些数据复制到列表中(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 :(得分: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个字段(列)。

您有两种选择:

  1. 切换到使用单个空格分隔符
  2. 使用简单的split()来处理多个空格:
  3.  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,则可以使用此功能。