哪个方法能按当前语言环境采用路径分隔符?

期望:
目录的分隔符随着系统自动变化,比如中文环境是 ,
日文环境是 ¥, 如:
中文环境是: d:\errors\input
日文环境是: d:¥errors¥input

我常常采用如下方法指定路径:
p = os.path.join(‘d:/‘,’errors’,’input’)
但是就会碰到盘符的问题,如D:/这个就不会替代成 ¥.
造成运行问题。
但是如果直接 p = os.path.join(‘d:’,’errors’,’input’)
也不行。 中文环境直接是 d:errors\input, 没有根目录。

除了将字符串替换。其他有好的方法是直接生成含盘符的路径就是如下效果的??

Jason990420
最佳答案

先说明一下:

  • 目录的分隔符原本就是 \ ('\x5c'), 后来才被加上可以使用 /
  • 日文环境或韩文环境中, \ ('\x5c') 只是被显示为 , 其实际的内容仍然是 \ ('\x5c').

os.path.join 其结果只是简单的字符串, 对于不同的目录的分隔符, 并不能得到相同的结果

>>> import os
>>> path1 = os.path.join('D:/', 'error', 'input')
>>> path2 = os.path.join('D:\\', 'error', 'input')
>>> type(path1), type(path2)
(<class 'str'>, <class 'str'>)
>>> path1, path2
('D:/error\\input', 'D:\\error\\input')
>>> path1 == path2
False

如果使用 pathlib.Path, Path.join 其结果是 'pathlib.WindowsPath' 的一个实例, 对于不同的目录的分隔符, 是可以得到相同的结果, 而且输出的字符串都是使用 \ ('\x5c'), 日文环境或韩文环境中应该没有问题.

>>> from pathlib import Path
>>> path1 = Path('D:/').joinpath('error', 'input')
>>> path2 = Path('D:\\').joinpath('error', 'input')
>>> type(path1), type(path2)
(<class 'pathlib.WindowsPath'>, <class 'pathlib.WindowsPath'>)
>>> path1, path2
(WindowsPath('D:/error/input'), WindowsPath('D:/error/input'))
>>> path1 == path2
True
>>> str(path1), str(path2)
('D:\\error\\input', 'D:\\error\\input')
>>> path1.anchor, path2.anchor
('D:\\', 'D:\\')
2年前 评论
讨论数量: 1
Jason990420

先说明一下:

  • 目录的分隔符原本就是 \ ('\x5c'), 后来才被加上可以使用 /
  • 日文环境或韩文环境中, \ ('\x5c') 只是被显示为 , 其实际的内容仍然是 \ ('\x5c').

os.path.join 其结果只是简单的字符串, 对于不同的目录的分隔符, 并不能得到相同的结果

>>> import os
>>> path1 = os.path.join('D:/', 'error', 'input')
>>> path2 = os.path.join('D:\\', 'error', 'input')
>>> type(path1), type(path2)
(<class 'str'>, <class 'str'>)
>>> path1, path2
('D:/error\\input', 'D:\\error\\input')
>>> path1 == path2
False

如果使用 pathlib.Path, Path.join 其结果是 'pathlib.WindowsPath' 的一个实例, 对于不同的目录的分隔符, 是可以得到相同的结果, 而且输出的字符串都是使用 \ ('\x5c'), 日文环境或韩文环境中应该没有问题.

>>> from pathlib import Path
>>> path1 = Path('D:/').joinpath('error', 'input')
>>> path2 = Path('D:\\').joinpath('error', 'input')
>>> type(path1), type(path2)
(<class 'pathlib.WindowsPath'>, <class 'pathlib.WindowsPath'>)
>>> path1, path2
(WindowsPath('D:/error/input'), WindowsPath('D:/error/input'))
>>> path1 == path2
True
>>> str(path1), str(path2)
('D:\\error\\input', 'D:\\error\\input')
>>> path1.anchor, path2.anchor
('D:\\', 'D:\\')
2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!