import re
import glob
import os
list_of_files = glob.glob('10.123.130*.txt')
pattern = re.compile(r"^\S+ \S+ \S+ 205\d+.*$")
extract_on = False
extracts_eds_upe = []
for fileName in list_of_files:
with open(fileName, 'r') as myfile:
print(myfile)
#lines = myfile.readlines()
for line in myfile:
if pattern.search(line) :
extract_on = True
extracts_eds_upe.append((line.rstrip('\n')))
with open(os.path.join(r'D:\Python Project\DRP\UPE', os.path.basename(fileName)), 'w') as mytext:
for line in extracts_eds_upe :
mytext.write("undo ")
mytext.write(line)
mytext.write('\n')-输入file#1
#
FTP server-source -i LoopBack0
FTP client-source -i LoopBack0
#
info-center loghost source LoopBack0
mpls switch-l2vc 10.123.146.97 205148001 tunnel-policy TE between 10.123.130.1 205148003 tunnel-policy TE backup 10.123.130.2 205148003 tunnel-policy TE encapsulation vlan
mpls switch-l2vc 10.124.24.165 205495401 tunnel-policy TE between 10.123.130.1 205495403 tunnel-policy TE backup 10.123.130.2 205495403 tunnel-policy TE encapsulation vlan
mpls switch-l2vc 10.123.146.53 205145401 tunnel-policy TE between 10.123.130.1 205145403 tunnel-policy TE backup 10.123.130.2 205145403 tunnel-policy TE encapsulation vlan
mpls switch-l2vc 10.123.146.49 213145001 tunnel-policy TE between 10.123.130.1 213145003 tunnel-policy TE backup 10.123.130.2 213145003 tunnel-policy TE encapsulation vlan
#-输入file#2
#
FTP server-source -i LoopBack0
FTP client-source -i LoopBack0
#
info-center loghost source LoopBack0
mpls switch-l2vc 10.123.146.85 205148001 tunnel-policy TE between 10.123.130.1 205148003 tunnel-policy TE backup 10.123.130.2 205148003 tunnel-policy TE encapsulation vlan
mpls switch-l2vc 10.124.24.16 205495401 tunnel-policy TE between 10.123.130.1 205495403 tunnel-policy TE backup 10.123.130.2 205495403 tunnel-policy TE encapsulation vlan
mpls switch-l2vc 10.123.146.49 213145001 tunnel-policy TE between 10.123.130.1 213145003 tunnel-policy TE backup 10.123.130.2 213145003 tunnel-policy TE encapsulation vlan
#-预期输出file#1
mpls switch-l2vc 10.123.146.97 205148001 tunnel-policy TE between 10.123.130.1 205148003 tunnel-policy TE backup 10.123.130.2 205148003 tunnel-policy TE encapsulation vlan
mpls switch-l2vc 10.124.24.165 205495401 tunnel-policy TE between 10.123.130.1 205495403 tunnel-policy TE backup 10.123.130.2 205495403 tunnel-policy TE encapsulation vlan
mpls switch-l2vc 10.123.146.53 205145401 tunnel-policy TE between 10.123.130.1 205145403 tunnel-policy TE backup 10.123.130.2 205145403 tunnel-policy TE encapsulation vlan-预期输出file#2
mpls switch-l2vc 10.123.146.85 205148001 tunnel-policy TE between 10.123.130.1 205148003 tunnel-policy TE backup 10.123.130.2 205148003 tunnel-policy TE encapsulation vlan
mpls switch-l2vc 10.124.24.16 205495401 tunnel-policy TE between 10.123.130.1 205495403 tunnel-policy TE backup 10.123.130.2 205495403 tunnel-policy TE encapsulation vlan我在文件中有多个文本文件和搜索模式,然后现在写到新的file.But中,输出多个文本的结果是一样的,实际上应该是不一样的。现在的问题是,当读取文本文件和匹配目标的模式,然后写到新文件,然后读取到第二个文件,匹配模式后也写入文件,但是当写入第二个文件时,我不想先从第二个文件中追加模式,这样我想在每个文件输出中分离出结果模式,任何人都可以帮助我。
发布于 2021-08-09 07:17:11
我只是稍微修改了你的代码,请看,它应该能工作。
import re
import glob
import os
list_of_files = glob.glob('10.123.130*.txt')
pattern = re.compile(r"^\S+ \S+ \S+ 205\d+.*$")
for fileName in list_of_files:
with open(fileName, 'r') as myfile:
print(myfile)
# Moved inside the loop.
extract_on = False
extracts_eds_upe = []
for line in myfile:
if pattern.search(line) :
extract_on = True
extracts_eds_upe.append((line.rstrip('\n')))
# Moved inside the loop.
with open(os.path.join(r'D:\Python Project\DRP\UPE', os.path.basename(fileName)), 'w') as mytext:
for line in extracts_eds_upe :
mytext.write("undo ")
mytext.write(line)
mytext.write('\n')发布于 2021-08-10 05:30:14
一行解析器,FYI:
find . -type f -name "10.123.130*.txt" | xargs -I{} sh -c "grep -E '^\S+ \S+ \S+ 205\d+.*$' {} > {}.result"解释:
find . -type f -name "10.123.130*.txt",列出当前directory.xargs -I{} sh -c,下的所有匹配文件,将find结果按行拆分,并通过one.grep -E '^\S+ \S+ \S+ 205\d+.*$',将它们传递给下一个grep,通过regex匹配内容并输出到stdout.> {}.result,,将grep结果重定向到带有.result后缀.的名为源文件名的新文件。
尽情享受吧!
https://stackoverflow.com/questions/68698830
复制相似问题