我正在尝试使用太干净的C ++文件进行Linux上的编译。具体来说,我正在尝试使用python脚本在#include语句中用斜杠'/'替换反斜杠'\'(我必须使用python)。 不幸的是,除了最后一个括号之外,脚本几乎删除了所有内容:
}
我正在使用这个脚本:
import os
import re
for dirpath, dirnames, filenames in os.walk(".\Source", topdown=True):
for file in filenames:
file = os.path.join(dirpath, file)
tempfile = file + ".bak"
with open(tempfile, "w") as target:
with open(file) as source:
for line in source:
if "#include" in line:
re.sub("\\\\", "/", line)
target.write(line)
os.remove(file)
os.rename(tempfile, file)
编辑: 在实施Simon Fraser的建议之后,该脚本现在运行正常。它看起来像这样:
import os
import re
for dirpath, dirnames, filenames in os.walk(".\Source", topdown=True):
for file in filenames:
file = os.path.join(dirpath, file)
tempfile = file + ".bak"
with open(tempfile, "w") as target:
with open(file) as source:
for line in source:
if "#include" in line:
line = re.sub(r"\\", "/", line)
target.write(line)
os.remove(file)
os.rename(tempfile, file)
答案 0 :(得分:2)
考虑这一部分:
for line in source:
if "#include" in line:
re.sub("\\\\", "/", line)
target.write(line)
在for
循环内,没有任何内容写入文件target
。 for
循环结束后,会写出line
的最后一个值,这可能就是您输出中只有最后一个}
的原因。
如果你在target.write
循环中移动for
,事情应该有效。 re.sub
也返回新值,而不是替换line
,因此您也需要在那里进行变量赋值。
for line in source:
if "#include" in line:
line = re.sub("\\\\", "/", line)
target.write(line)
字符串也有.replace
方法,可能更快:
for line in source:
if '#include' in line:
line = line.replace('\\','/')
target.write(line)