繁体   English   中英

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

[英]Match a specific number of characters in string and delete 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。

谢谢

什么规则告诉您“ 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跳过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

一种使用正则表达式的方式。 这将专门找到要删除的行,方法是丢弃初始单词,而其他单词保持不变。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM