在 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 中编写固定宽度、空格分隔的 CSV 输出

在python中将空格分隔文件转换为逗号分隔值文件

在Python中拆分具有未知数量空格的字符串作为分隔符

如何在python中动态地读取用空格分隔的输入,最好是在List上读取不同类型的数据?

从空格分隔的 .dat 文件中获取日期时间 - python/pandas [重复]

python中,如何将字符串中的多个不等量空格改为改为逗号分隔?