根据一定数量的字符读一张表

2024-07-07 07:48:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从文本文件中保存的表中提取彗星的名称。然而,有些彗星是1字的,有些是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


Tags: 名称名字字符a3文本文件桌子l3彗星
1条回答
网友
1楼 · 发布于 2024-07-07 07:48:38
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。 它允许解析文件,指定每列的字符数

相关问题 更多 >