如何用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)
\
>>>
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
如果我访问 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)
\
>>>