我想从文本文件中保存的表中提取彗星的名称。然而,有些彗星是措辞单,其他是2措辞,有些是3措辞。我的表看起来像这样:
9P/Tempel 1 1.525 0.514 10.5 5.3 2.969
27P/Crommelin 0.748 0.919 29.0 27.9 1.484
126P/IRAS 1.713 0.697 45.8 13.4 1.963
177P/Barnard 1.107 0.954 31.2 119.6 1.317
P/2008 A3 (SOHO) 0.049 0.984 22.4 5.4 1.948
P/2008 Y11 (SOHO) 0.046 0.985 24.4 5.3 1.949
C/1991 L3 Levy 0.983 0.929 19.2 51.3 1.516
但是,我知道彗星的名字是从字符5到字符37.我怎么能写一个代码告诉python第一列是从第5个字符到第37个字符?
答案 0 :(得分:1)
data = """9P/Tempel 1 1.525 0.514 10.5 5.3 2.969
27P/Crommelin 0.748 0.919 29.0 27.9 1.484
126P/IRAS 1.713 0.697 45.8 13.4 1.963
177P/Barnard 1.107 0.954 31.2 119.6 1.317
P/2008 A3 (SOHO) 0.049 0.984 22.4 5.4 1.948
P/2008 Y11 (SOHO) 0.046 0.985 24.4 5.3 1.949
C/1991 L3 Levy 0.983 0.929 19.2 51.3 1.516""".split('\n')
要阅读整个文件,您可以使用
f = open('data.txt', 'r').readlines()
您似乎拥有可以使用的列。 如果您只对第一列感兴趣,那么:
len("9P/Tempel 1 ")
它给出了33。
所以,
提取第一列:
for line in data:
print line[:33].strip()
这是打印的:
9P/Tempel 1
27P/Crommelin
126P/IRAS
177P/Barnard
P/2008 A3 (SOHO)
P/2008 Y11 (SOHO)
C/1991 L3 Levy
如果你想要的是:
Tempel 1
Crommelin
IRAS
...
您必须使用正则表达式。 示例:
reg = '.*?/[\d\s]*(.*)'
print re.match(reg, '27P/Crommelin').group(1)
print re.match(reg, 'C/1991 L3 Levy').group(1)
这是输出:
Crommelin
L3 Levy
您还可以浏览read_fwf of the python pandas library。 它允许解析您的文件,指定每列的字符数。