我有这个内容:
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()
问题是 back-ref \1
不等于 filename.in
:
No such file or directory: '\\1'
有什么建议吗?
最佳答案
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)
关于 python : pass regex back-reference value to method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24720529/