删除前导字符Python

时间:2014-09-09 14:21:01

标签: python

我想删除此文件每行的前导字符,直到找到数字:

文件如下所示:

* Fail 63779 - Error A
* Fail 64969 - Error B
* Fail 61529 - Error C
* Fail 65068 - Error D

我的输出应如下所示:

63779 - Error A
64969 - Error B
61529 - Error C
65068 - Error D

如果按照失败号的升序输出此输出,那就更好了:

61529 - Error C
63779 - Error A
64969 - Error B
65068 - Error D

1 个答案:

答案 0 :(得分:2)

正则表达式\d.*将匹配字符串中的第一个数字,直到最后一个非换行符。这意味着你可以使用

with open("myfile.txt") as f:
    lines = sorted(re.findall("\d.*", f.read()))

获取按字典顺序排序的行列表(不是数字,所以如果数字位数不同,请小心)。

然后你可以把它写回一个像这样的新文件:

with open("output.txt", "w") as f:
    f.writelines(lines)

如果需要按数字排序,可以定义辅助函数

def lint(s):
    return int(re.match(r"\d+", s).group())

并像这样使用它:

lines = sorted(re.findall("\d.*", f.read()), key=lint)

示例:

>>> s = """* Fail 63779 - Error A
... * Fail 64969 - Error B
... * Fail 61529 - Error C
... * Fail 7068 - Error D"""
>>> sorted(re.findall("\d.*", s), key=lint)
['7068 - Error D', '61529 - Error C', '63779 - Error A', '64969 - Error B']
相关问题