如何用Python处理Windows路径中的\2?

How to handle \2 in the Windows path with Python?

I 运行 一个外部函数 returns Windows 磁盘上文件的路径作为字符串(字符串的一部分: Error details are at "C:\Users\ADMINI~1\AppData\Local\Temp\BuildErrors.txt" Succeeded

因此,我将返回的结果加载到一个字符串变量中: s = '''Error details are at "C:\Users\ADMINI~1\AppData\Local\Temp\BuildErrors.txt" Succeeded''' file_path = s.split('"')[1] print file_path

> C:\Users\ADMINI~1\AppData\Local\Temp\BuildErrors.txt #(在Temp

之后有STX图标

如果我访问 Python Shell 中的 file_path,它的打印如下:

file_path 'C:\Users\ADMINI~1\AppData\Local\Temp\x02\BuildErrors.txt'

我知道 </code> 在 Python 中被作为特殊字符处理,但是由于路径无效,这使我无法读取文件。</p> <p>当我从外部函数获取字符串时,我已经有了一个字符串对象,据我所知,您不能从中创建原始字符串 (<code>r'')。

我已经在源字符串上尝试了 s.encode('string-escape'),但它保留了 \x02

如何通过处理其中的来生成有效路径?

如果你的字符串路径是 'C:\ABC\xyz.txt' 然后是语句,它给你 'C:\ABC\xyz.txt'

要使其成为 python 文件处理的有效路径,格式应为 C:/ABC/xyz.txt

所以如果路径 = 'C:\ABC\xyz.txt'

路径=path.replace("\\","/")

路径格式正确。

所以你有一些事情要做。

1) 你应该使用 Python 3. 是时候了。

2) 如果您只想切换到 unix 样式路径分隔符,Monik 的回答是正确的。 Python 将允许您在 windows 系统上使用 unix 风格的路径。请记住,其他 windows shell 和程序不会。

3) 这是正在发生的事情。如果您的字符串位于名为 fred.txt 的文件中,则

>>> with open('fred.txt') as f:
...  derf = f.readline()
...
>>> derf
'Error details are at "C:\Users\ADMINI~1\AppData\Local\Temp\2\BuildErrors.txt" Succeeded'
>>> file_path = derf.split('"')[1]
>>> file_path
'C:\Users\ADMINI~1\AppData\Local\Temp\2\BuildErrors.txt'
>>> os.path.split(file_path)
('C:\Users\ADMINI~1\AppData\Local\Temp\2', 'BuildErrors.txt')
>>>

然后似乎一切正常。 python shell 显示双斜杠是因为它在内部存储字符串的方式。如果将该值写入文件或将其打印到屏幕上,您会得到

>>> print(file_path)
C:\Users\ADMINI~1\AppData\Local\Temp\BuildErrors.txt
>>>

那么现在我们进入了问题的关键。斜杠字符 '\' 在 python 字符串中具有特殊含义。它是用来告诉系统的,嘿,接下来可能会有所不同。所以我可以通过十六进制或 unicode 指定不会出现在我的键盘上的字符。例如 3 种在字符串中定义井号的方法。我推荐阅读 http://python-reference.readthedocs.io/en/latest/docs/str/escapes.html

>>> a = "#"
>>> b = "\x23"
>>> c = "\u0023"
>>> a
'#'
>>> b
'#'
>>> c
'#'
>>> a == b
True
>>> a == c
True
>>> b == c
True
>>> 

那么,如果“\”有特殊含义,我该如何告诉系统我真的只想要一个斜杠?你躲开它! python shell 中的 '\\' 只是说我想要一个斜杠。

>>> s = "\"
>>> s
'\'
>>> print(s)
\
>>>