从没有明确分隔符的文本文件中读取列
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
我有这个文本文件: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