目录

  • Windows,Liunx系统中的文件路径
  • Windows下Python中的文件路径
  • os.sep引发的血案


Windows,Liunx系统中的文件路径

  • 在Linux系统中,路径分隔符是 / (正斜杠)
  • 在Windows系统中,路径分隔符是 \ (反斜杠)

Windows 用反斜杠(“\”)的历史来自 DOS,原因是传统是用斜杠(“/”)已经用于表示命令行参数。

windows python 路径 : python windows下文件路径写法_Windows

Windows下Python中的文件路径

python中文件路径有多种表示方式,如果直接显示当前工作目录,使用双反斜杠作为分隔符。这样做是因为单个反斜杠是特殊字符,前面的\可以使后面的\变为普通字符。

os.getcwd()
>>>'C:\\Users\\Wendy'

以读取test.jpg为例。如果自己写文件目录(读取or写入),有以下几种形式:斜杠(path),双反斜杠(path1)或者加r使反斜杠不再表示特殊字符(path2)。path3的写法会导致读取图片失败。

path = 'D:/2020AI/imgs/p42/test.jpg'
path1 = 'D:\\2020AI\\imgs\\p42\\test.jpg'
path2 = r'D:\2020AI\imgs\p42\test.jpg'
path3 = 'D:\2020AI\imgs\p42\test.jpg'
img = cv2.imread(path)

os.sep引发的血案

os.sep可以根据当前操作系统返回正反斜杠,但是如果用print去查看os.sep,有时候会引起误解。
下面这种写法可以保证the_path在不同操作系统中都可以运行。(但是实际上当python在Linux和Windows中都是用正斜杠连接地址,就不存在差异。)

the_path = 'D:{sep}2020AI{sep}imgs{sep}p42{sep}test.jpg'.format(sep=os.sep)
print(the_path)
>>> D:\2020AI\imgs\p42\test.jpg

虽然看上去和之前错误的path3是一样的,但实际上当使用the_path读取图片时,存在错误。
当我们print path3时候会得到。

print(path3)
>>> D:‚0AI\imgs\p42 est.jpg

同时,

test1 = path2.replace(os.sep, '/')
test2 = path2.replace('\\', '/')
print(test1,'\n', test2)
D:/2020AI/imgs/p42/test.jpg 
 D:/2020AI/imgs/p42/test.jpg

提出这个问题是因为遇到了下面这个bug。

path = 'D:/2020AI/imgs/p42/test.jpg'
pos = path.rfind(os.sep)  #从右边找分隔符
print(pos)
if pos<0:
    raise Exception('Cannot find the directory from the path', path)
path = path[:pos]
os.makedirs(path, exist_ok = True)

代码的含义是:为了存放生成的test.jpg,在imgs文件夹底下生成对应的文件夹,以防止保存失败。但是这里因为使用了正斜杠,所以os.sep的查找值返回-1,没有找到建文件夹的正确的位置。所以用os.sep查找时,要考虑原来目录使用的表达形式。