0

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

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。

谢谢

4

2 回答 2

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))

或者,如果规则是它必须是字母和数字,并且只能是大写字母,并且后面必须跟一个空格……这只是andPython 中连接的三个条件,就像在英语中一样,所以这样写:

def fix_line(line):
    if line[:9].isalnum() and line[:9] == line[:9].upper() and line[9:10].isspace():
        # everything else is the same
于 2013-09-06T21:44:12.397 回答
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
于 2013-09-06T21:42:51.533 回答