匹配字符串中的特定数量的字符并删除python

时间:2013-09-06 21:34:46

标签: python

我有一个包含许多行的文本文件。某些行以特定数量的字符开头。我想找到包含该数字的字符集并删除它们和后面的空格。这是列表的一个例子。

MARVEL COMICS

JUN130675   AGE OF ULTRON HC    $75.00
JUL130663   ALL NEW X-MEN #16   $3.99
JUL130606   AVENGERS AI #3  $2.99
JUL130642   DAREDEVIL DARK NIGHTS #4 

我想在字符串的开头找到9个字符的集合并删除它们加上空格。总有9个,总是在开始时。此文本文件包含许多行,因此我想逐步浏览每一行并将输出保存在新的文本文件中。起始文件的名称是final.txt。我选择的语言是python。

由于

2 个答案:

答案 0 :(得分:4)

什么规则告诉你“JUN130675”是要跳过的,但“MARVEL CO”不是?如果您可以用英语描述规则,则可以在代码中对其进行描述。

例如,规则可能就是“JUN130675”只是字母和数字,而“MARVEL CO”中间还有其他东西(空格)。让我们在Python中写一下:

def fix_line(line):
    if line[:9].isalnum():
        return line[10:].lstrip()
    else:
        return line

line[:9]获得前9个字符,isalnum检查所有字符是字母还是数字。如果是这样,line[10:]会跳过前9个字符,lstrip会跳过后面的空格。

然后我们将其应用于每一行:

with open('input.txt') as fin, open('output.txt', 'w') as fout:
    for line in fin:
        fout.write(fixline(line))

或者,如果规则是它必须是字母和数字,并且只有大写字母,并且必须后跟空格......这只是在Python中由and加入的三个条件,就像在英语中一样,所以这样写:

def fix_line(line):
    if line[:9].isalnum() and line[:9] == line[:9].upper() and line[9:10].isspace():
        # everything else is the same

答案 1 :(得分:1)

使用正则表达式的一种方法。这将特别找到你想要通过丢弃原始单词而缩短其他行来缩短的行。

import fileinput
import re

for line in fileinput.input():
    print(re.sub(r'^\w{3}\d{6}\s+', '', line), end='')

像以下一样运行:

python3 script.py final.txt >outfile

它产生:

MARVEL COMICS

AGE OF ULTRON HC        $75.00
ALL NEW X-MEN #16       $3.99
AVENGERS AI #3  $2.99
DAREDEVIL DARK NIGHTS #4