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

Reading columns from text file without a clear delimiter

我有这个文本文件: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])

但我想知道是否有人知道更多 ..eloquent.. 实现此目标的方法?

使用if word: 完全没问题。另一种选择是通过替换 filter 来消除空值:

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

与:

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

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

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

import re

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