在Python 2.4中,我该如何删除“;”后面的字符?

44

假设我正在解析一个文件,它使用;作为注释字符。我不想解析注释。如果一行看起来像这样:

example.com.              600     IN      MX      8 s1b9.example.net ; hello!

除了这种方法之外,是否有更简单/更优雅的方法来去除字符:

rtr = ''
for line in file:
    trig = False
    for char in line:
        if not trig and char != ';':
            rtr += char
        else:
            trig = True
    if rtr[max(rtr)] != '\n':
        rtr += '\n'

是的,应该在??中提到Python2.4。 - lfaraone
3
Python2.4已经落后于当前稳定版本两个版本了。你的想法呢? - SilentGhost
2
可能是重复的问题:如何在Python中删除特定字符后的所有字符? - Mr. Bultitude
8个回答

137

我建议说

line.split(";")[0]

使用该方法将获得所有从开头到第一个 ";" 字符之前的字符串。如果没有 ";" 字符,则会返回整行文本。


我同意@Jiri的观点,即使用maxsplit参数,即line.split(";", 1)[0]。这样更快(特别是如果您正在解析大量文本),因为您不必为获取第一个元素而拆分整个文本。 - Eddy

19

只需按照注释在该行上进行拆分,然后获取第一个元素 例如:

line.split(";")[0]

4

对于Python 2.5或更高版本,我会使用partition方法:

rtr = line.partition(';')[0].rstrip() + '\n'

2
@ghostdog74:Python 的稳定版本为 2.6 和 3.1。 - SilentGhost
1
@SG,没问题,但是如果仍在生产中使用<2.5++,他们将没有这种奢侈。 - ghostdog74
1
当我发布这个答案时,它是有效的,因为OP还没有提到他正在使用Python 2.4(现在已经五年了)。我不会删除这个答案,因为我发现partition返回一个固定长度向量是一个有用的特性,尽管在这里并不重要。 - Sinan Ünür
为什么“分区”更好? - Matt Fletcher
@MattFletcher 想一想当你解析一行有成千上万个字段的数据时,你只需要第一个字段会发生什么。 - Sinan Ünür

4

因此,您需要在第一个分号处拆分该行,获取分号之前的所有内容,去除任何残留的空格,并附加换行符。

rtr = line.split(";", 1)[0].rstrip() + '\n'

文档链接:


提供的链接和使用的方法不同。 - SilentGhost

3
file = open(r'c:\temp\test.txt', 'r')
for line in file:   print
   line.split(";")[0].strip()

1

在Python中,一行代码读取、分割、去除空格并连接带有换行符的行:

rtr = '\n'.join(line.split(';')[0].strip() for line in open(r'c:\temp\test.txt', 'r'))

1

这里是另一种方法:

In [6]: 行 = "foo;bar"
In [7]: 行[:行.find(";")] + "\n"
Out[7]: 'foo\n'

如果line == "fubar",那会产生"fuba\n"的结果...使用一条语句纠正这个问题会产生如下代码:line[:None if line.find(";") == -1 else line.find(";")](我绝对不会建议使用这种方式)。 - John Machin

-3

我尚未用Python测试过这个,但在其他地方我使用类似的代码。

import re
content = open(r'c:\temp\test.txt', 'r').read()
content = re.sub(";.+", "\n")

1
你的 re.sub() 缺少一个参数,因此无法运行 - 这非常幸运,因为它会破坏文件中第一个 ';' 和其后的所有内容。 - John Machin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接