花了3个小时查看如何使用os.chdir
,运行此代码后我得到OSError
:
dir1= "D:\_devs\Python01\project\03-Connect_\PyBind"
os.chdir(dir1)
OSError:[WinError 123]文件名,目录名或卷标语法不正确:
'D:\\_devs\\Python01\\project\x03-Connect_\\PyBind\\examples'
dir1
的定义无法修改(因为我想保留从Windows文件夹中复制/粘贴(例如使用r'<string>
或斜杠)
但dir1
变量可以通过字符串操作进行修改。
为什么生成\x
?
EDIT2(租赁空间删除):
dir1 = r"D:\_devs\Python01\project\03-Connect_Java_CPP_Excel\PyBindGen\examples"
dir2= os.path.abspath(dir1)
os.chdir(dir1)
仍有错误......
答案 0 :(得分:0)
您可以尝试使用string-escape和替换:
def norm(pth):
pth = pth.encode("string-escape").replace("\\x", "/")
return pth.replace("\\\\", "/")
您可能需要一个正则表达式来获得更强大的方法,但它应该适用于您的示例字符串:
In [77]: dir1 = "D:\_devs\Python01\project\03-Connect_\PyBind"
In [78]: norm(dir1)
Out[78]: 'D:/_devs/Python01/project/03-Connect_/PyBind'
对于python3,请尝试:
def norm(pth):
pth = pth.encode("unicode-escape").replace(b"\\x", b"/")
return pth.replace(b"\\\\", b"/").decode("utf-8")
对于没有十六进制的路径,只应返回字符串,只需将任何反斜杠更改为/
:
In [30]: dir1 = "D:\_devs\Python01\project\Connect_\PyBind"
In [31]: norm(dir1)
Out[31]: 'D:/_devs/Python01/project/Connect_/PyBind'