我有一个包含许多行的文本文件。某些行以特定数量的字符开头。我想找到包含该数字的字符集并删除它们和后面的空格。这是列表的一个例子。
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。
由于
答案 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