我有这样的内容:
Data1
import filename.in
Data2
并希望将import filename.in
行替换为filename
文件的内容,因此我使用此:
content = re.sub(r'import\s+(.*)\s+\n', '\n' + read_file('\1') + '\n', content)
read_file(in)
会返回文件in
的内容。
def read_file(file):
with open(file) as f:
return f.read()
问题是,反对\1
没有评估到filename.in
:
No such file or directory: '\\1'
任何建议?
答案 0 :(得分:3)
read_file(..)
不是由re.sub
调用的。 '\1'
字面上用作文件名。除此之外,\1
被解释为\x01
。
为此,您需要传递替换功能:
content = re.sub(
r'import\s+(.*)\s+\n',
lambda m: '\n' + read_file(m.group(1)) + '\n', # `m` is a match object
content)