python - 我需要过滤或删除文件中的一些行

标签 python python-3.x text

这是输入文件,它的结构已经正确:

Name:  mr. Apple
class:  class 1
sub:  subject 1
ContactNo: 11111
Name:  mr. ball
class:  class  2
sub:  subject  2
ContactNo: 2222
Name:  mr. cat
class:  class 3
sub:  subject 3
ContactNo: 33333
class:  class 4
sub:  subject 4
ContactNo:44444
class:  class 5
sub:  subject 5
ContactNo: 55555
Name:  mr. tom
class:  class 9
sub:  subject 9
ContactNo: 99999

如您所见,有些细节没有名称。

for example: class: class 4 sub: subject 4 ContactNo:44444

我需要删除这些,只保留那些有名字的人的详细信息。

预期输出:

Name:  mr. Apple
class:  class 1
sub:  subject 1
ContactNo: 11111
Name:  mr. ball
class:  class  2
sub:  subject  2
ContactNo: 2222
Name:  mr. cat
class:  class 3
sub:  subject 3
ContactNo: 33333
Name:  mr. tom
class:  class 9
sub:  subject 9
ContactNo: 99999

我已经试过了:

errors = []                       # The list where we will store results.
linenum = 0
substr = "Name:".lower()          # Substring to search for.
substr1 = "class:".lower()
substr2 = "sub:".lower()
substr3 = "ContactNo:".lower()

with open ('scrap.txt', 'rt') as myfile:
    for line in myfile:
        linenum += 1
        if line.lower().find(substr) != -1:    # if case-insensitive match,
            errors.append(line)
        elif  line.lower().find(substr1) != -1:        
            errors.append(line)
        elif  line.lower().find(substr2) != -1:     
            errors.append(line)
        elif  line.lower().find(substr3) != -1:      
            errors.append(line)

for err in errors:
    fp = open("rawextract.txt","a")
    fp.write(err)
    fp.close()
    print(err)

但我不知道如何丢弃不完整的行。

最佳答案

您可以将 re.findall 与正则表达式模式一起使用,以匹配预期 header 的正确结构序列:

import re
with open('scrap.txt') as myfile:
    for m in re.findall('Name:.*\nclass:.*\nsub:.*\nContactNo:.*', myfile.read()):
        print(m)

这个输出:

Name:  mr. Apple
class:  class 1
sub:  subject 1
ContactNo: 11111
Name:  mr. ball
class:  class  2
sub:  subject  2
ContactNo: 2222
Name:  mr. cat
class:  class 3
sub:  subject 3
ContactNo: 33333
Name:  mr. tom
class:  class 9
sub:  subject 9
ContactNo: 99999

关于python - 我需要过滤或删除文件中的一些行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55765969/

相关文章:

css - 如何自动为特定文本实例着色?

python - Django 管理员在 POST 上返回 404,在 GET 上返回 200

python - 尝试构建简单的文件 uploader Facebook 应用程序

python-3.x - 绑定(bind)方法的 MyPy 类型注释?

python - 属性错误: 'OAndX' object has no attribute 'run'

java - 将图像转换为文本 - Java

python - PyCharm 不高亮错误

python - 为什么 len(a[0]) 与 a.shape[1] 不同

python - 非成员运算符重载(特别是运算符==)在 Cython 中是否被破坏?

C# Listview 添加带有图像和文本的项目,并将文本左对齐