python os.walk显示混合的windows和unix路径



我正在尝试识别文件夹中具有特定名称的所有文件。我使用标准代码来做到这一点,看起来像这样:

for paths, subdirs, files in os.walk(start_dir, topdown=True):
for file in files:
print(os.path.join(paths, file))

我的问题是关于这段代码在windows机器中的输出,基本上动态部分的路径有错误的斜杠:

D:/JAJA/Projects/DAF/AIM/WEBAPP/trunk/src/main/java/ie/gov/agriculture/aimaesAesSheetNumberEntity.java
D:/JAJA/Projects/DAF/AIM/WEBAPP/trunk/src/main/java/ie/gov/agriculture/aimaesDocumentReceivedDetailEntity.java
D:/JAJA/Projects/DAF/AIM/WEBAPP/trunk/src/main/java/ie/gov/agriculture/aimaesDocumentReceivedEntity.java
D:/JAJA/Projects/DAF/AIM/WEBAPP/trunk/src/main/java/ie/gov/agriculture/aimaesDocumentTypeEntity.java

给出的起始文件夹是:

D:/JAJA/Projects/DAF/AIM/WEBAPP/trunk/src/main/java/ie/gov/agriculture/aim

文件夹分隔符为unix分隔符:"/"

而os.walk函数找到的所有后续子文件夹都有windows斜线:""

所以最后我有一个无效的路径,不能直接使用。这是python操作系统库中的错误吗?

目前我可以很容易地用正确的分离器替换错误的分离器,但我想知道这是否是唯一的方法?

这里没有实际问题。Windows支持两个路径分隔符;前向和后向斜杠都是有效的并且是受支持的,即使混合使用也是如此。一个是os.sep((,另一个是os.altsep字符(/(。

os.path.join()用户os.sep可以加入路径,但不会替换输入路径中的os.altsepos.walk()只是使用os.path.join()来构建它生成的每个(path, files, directories)元组的第一个元素

如果这让你感到困扰,使用os.path.normpath()函数对的路径进行归一化:

在Windows上,它将正向斜杠转换为反向斜杠。

因此,对传递给os.walk():的路径进行归一化

for paths, subdirs, files in os.walk(os.path.normpath(start_dir), topdown=True):
for file in files:
full_path = os.path.join(paths, file)
print(full_path)

或者对循环中生成的路径进行归一化:

for paths, subdirs, files in os.walk(start_dir, topdown=True):
for file in files:
full_path = os.path.join(paths, file)
normalised = os.path.normpath(full_path)
print(normalised)

或规范化输入字符串:

使用os.path.join(path).replace("\","/")os.path.normpath().replace("\","/")将路径转换为所有正斜杠'/'

最新更新