我有这个文本文件: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])
但是我想知道是否有人知道一种更好的方式来实现这个目标?
答案 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