我有一个文件列表,我想用RegEx替换迭代,一些在单独的行上,一些需要多行匹配。
我能够遍历文件列表中的行并使用此方法写入磁盘。
import fileinput, re
ListFiles = ['in/spam.txt', 'in/eggs.txt', 'in/spam2.txt', 'in/eggs2.txt',
'in/spam3.txt', 'in/eggs3.txt', 'in/spam4.txt', 'in/eggs4.txt',
'in/spam5.txt', 'in/eggs5.txt']
with fileinput.input(files=(ListFiles), inplace=True, backup='.bak') as f:
for line in f:
line = re.sub(r'this','that', line)
print(line, end='')
现在我想将f
中的输出行收集为一个字符串,我可以为其运行多行RegEx例程。
我尝试了with(open)
,我可以使用它与ReGex一起使用单个文件,但它不会将列表作为参数,只是文件名。
with open("spam.txt", "w") as f: # sample other use, list not allowed here.
data = f.read()
data = re.sub(r'sample', r'sample2', data)
print(data, file=f)
我尝试将f
作为字符串收集到新的变量数据中,如下所示:
data = f(str)
data = re.sub(r'\\sc\{(.*?)\}', r'<hi rend="small_caps">\1</hi>', data) ## Ignore that this not multiline Regex for sample purposes only.
print(data)
但是这会产生错误,即FileInput不可调用。
有没有一种方法可以迭代并将RegEx应用于文件行和文件中与字符串相同的文件?
答案 0 :(得分:0)
如果可以将单个文件作为一个整体读入内存,那么要在文件列表中执行多行替换,您可以一次处理一个文件:
for filename in ListFiles:
with open(filename) as file:
text = file.read() # read file into memory
text = text.replace('sample\n1', 'sample2') # make replacements
with open(filename, 'w') as file:
file.write(text) # rewrite the file