从文本文件中读取列而没有明确的分隔符

时间:2015-01-09 23:47:36

标签: python-2.7

我有这个文本文件:http://henke.lbl.gov/tmp/xray6286.dat
其中我想拉出能量和传输列。

不幸的是,它没有明确的分隔符 - 单词由一系列空格分隔。

运行类似

的内容
with open('xray6286.dat', 'U') as data:
reader = csv.reader(data, delimiter=' ')
for line in reader:
    print line

会产生如下输出:

['', 'Cu', 'Density=8.96', 'Thickness=100.', 'microns']
['', 'Photon', 'Energy', '(eV),', 'Transmission']
['', '', '', '', '5000.0', '', '', '', '', '', '0.52272E-07']
['', '', '', '', '5250.0', '', '', '', '', '', '0.42227E-06']
['', '', '', '', '5500.0', '', '', '', '', '', '0.24383E-05']

我可以通过以下代码强制它给我我想要的值:

import csv

energy = []
transmission = []

with open('xray6286.dat', 'U') as data:
    reader = csv.reader(data, delimiter='\n')
    for line in reader:
        if reader.line_num > 2:
            cleaned_line = []
            for word in line[0].split(' '):
                if word:
                    cleaned_line.append(word)
            energy.append(cleaned_line[0])
            transmission.append(cleaned_line[1])

但是我想知道是否有人知道一种更好的方式来实现这个目标?

3 个答案:

答案 0 :(得分:1)

使用if word:完全没问题。另一个选择是通过替换:{/ p>来filter出现空值

for word in line[0].split(' '):

使用:

for word in filter(bool, line[0].split(' ')):

答案 1 :(得分:0)

您可以将结果存储在数据结构中,然后遍历它并删除空条目。 @alfasin提出了最好的想法,即使用filter

答案 2 :(得分:0)

regex split方法可以根据任意数量的空格分隔数据点。

import re

for word in re.split(r'\s+', line):
    print word