Python转义字符

ter*_*ild 6 python escaping path

我已经挣扎了好几个小时,虽然我找到了解决方案,但我不喜欢它.有没有内置的方法来解决这个问题:

您在Windows上使用包含路径的变量.您正在尝试使用它打开文件,但它包含在运行时之前无法确定的转义字符.

如果您使用'shutil'并执行: shutil.copy(file_path, new_file_path)

它工作正常.

但是,如果您尝试使用相同的路径:

f = open(file_path, encoding="utf8")

它不起作用,因为路径中的'\ a'被读作'Bell'= 7

我尝试了所有这些,但我唯一能做的就是自定义函数'reconstruct_broken_string'.

    file_path = "F:\ScriptsFilePath\addons\import_test.py"

    print(sys.getdefaultencoding())
    print()
    print(file_path.replace('\\', r'\\'))
    print( '%r' % (file_path))
    print( r'r"' + "'" + file_path+ "'")
    print(file_path.encode('unicode-escape'))
    print(os.path.normpath(file_path))
    print(repr(file_path))

    print()
    print(reconstruct_broken_string(file_path))


backslash_map = { '\a': r'\a', '\b': r'\b', '\f': r'\f',
                  '\n': r'\n', '\r': r'\r', '\t': r'\t', '\v': r'\v' }
def reconstruct_broken_string(s):
    for key, value in backslash_map.items():
        s = s.replace(key, value)
    return s
Run Code Online (Sandbox Code Playgroud)

这是打印输出:

utf-8

F:\\ScriptsFilePathddons\\import_test.py
'F:\\ScriptsFilePath\x07ddons\\import_test.py'
r"'F:\ScriptsFilePathddons\import_test.py'
b'F:\\\\ScriptsFilePath\\x07ddons\\\\import_test.py'
F:\ScriptsFilePathddons\import_test.py
'F:\\ScriptsFilePath\x07ddons\\import_test.py'

F:\ScriptsFilePath\addons\import_test.py
Run Code Online (Sandbox Code Playgroud)

是否有内置的方法来做这个而不是这个功能?为什么它适用于'shutil'而不是'open'

谢谢

Rob*_*obᵩ 11

你的问题就在这条线上:

file_path = "F:\ScriptsFilePath\addons\import_test.py"
Run Code Online (Sandbox Code Playgroud)

尝试以下方法之一:

file_path = r"F:\ScriptsFilePath\addons\import_test.py"
file_path = "F:\\ScriptsFilePath\\addons\\import_test.py"
Run Code Online (Sandbox Code Playgroud)

甚至:

file_path = "F:/ScriptsFilePath/addons/import_test.py"
Run Code Online (Sandbox Code Playgroud)

(是的,Windows接受正斜杠作为文件分隔符.)

参考:http://docs.python.org/2/reference/lexical_analysis.html#string-literals