将“\”替换为“\\”

Replacing '\' with '\\'

我正在尝试用“\\”替换“\”,但它并没有像我想的那样工作。

我尝试使用 f.replace('\','\'),但在行继续字符后出现 意外字符。

files = []
# r=root, d=directories, f = files
for r, d, f in os.walk(path):
    for file in f:
        if '.dcap' in file:
            files.append(os.path.join(r, file))

for f in files:
    print(f)
    f.replace( '\' , '\')
    os.system("dcapgen.exe f")

基本上我想 运行 给定目录(路径)中所有 .dcap 文件的 .exe 文件。在文件中打印 f 时,它给出的文件路径名称如 C:\Users\folder\a.dcap。但是在给出 os.system("dcapgen.exe f") 时,因为 f 代表 C:\Users\folder\a.dcap 并且 python 无法识别单个反斜杠,它的抛出错误如

跟踪文件:f 失败的。 该文件仍然可以处理,但总帧数可能显示为零,并且可能会为最后一帧生成一条错误消息。 无法打开文件:"f"(没有那个文件或目录)

所以,我想用双反斜杠替换单反斜杠。我尝试使用 os.system("dcapgen.exe C:\Users\folder\a.dcap") 并且它工作正常。

f 是一个变量。要在字符串中使用变量,您需要 string Interpolation

你可以使用 %-formatting

files = []
# r=root, d=directories, f = files
for r, d, f in os.walk(path):
    for file in f:
        if '.dcap' in file:
            files.append(os.path.join(r, file))

for f in files:
    print(f)
    f.replace( '\' , '\')
    os.system("dcapgen.exe %s" % f)

我建议以不同的方式解决问题。首先是 built-in 包 glob,它让您有机会使用星号作为通配符来过滤某种类型的文件。其次,您不必更换文件分隔符。

代码

import glob
import os

files = glob.glob("{}{}*.dcap".format(path, os.filesep)

for f in files:
    print(f)
    os.system("dcapgen.exe \"{}\"".format(f))

解释

反斜杠字符正在转义所有内容。所以当你写 '\', '\' 时,它实际上解析为这个字符串 ', 加上无效序列 \'。这是有关行继续错误的原因。

如果你想在另一个字符串中使用一个字符串变量的值,你必须使用一个格式化的字符串。我建议使用 str.format 而不是模运算,因为它在事故方面更安全。在错误消息中,它表示操作系统无法解析文件名 "f"。这并不意味着 f 的值,而是文字字符串 "f" 作为文件名。