FileInput为行与fileinput为字符串

时间:2015-10-11 03:46:01

标签: python regex python-3.x

我有一个文件列表,我想用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应用于文件行和文件中与字符串相同的文件?

1 个答案:

答案 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