这是输入文件,它的结构已经正确:
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/