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

标签 python windows python-os path-separator

我正在尝试识别文件夹中具有特定名称的所有文件。我正在使用标准代码来执行此操作,如下所示:

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/aim\aes\AesSheetNumberEntity.java
D:/JAJA/Projects/DAF/AIM/WEBAPP/trunk/src/main/java/ie/gov/agriculture/aim\aes\DocumentReceivedDetailEntity.java
D:/JAJA/Projects/DAF/AIM/WEBAPP/trunk/src/main/java/ie/gov/agriculture/aim\aes\DocumentReceivedEntity.java
D:/JAJA/Projects/DAF/AIM/WEBAPP/trunk/src/main/java/ie/gov/agriculture/aim\aes\DocumentTypeEntity.java

给出的起始文件夹是:

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

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

虽然 os.walk 函数找到的所有后续子文件夹都使用窗口斜杠代替:"\"

所以最后我得到了无法立即使用的无效路径。这是 python 操作系统库中的错误还是实际上是什么?

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

最佳答案

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

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

如果这让您感到困扰,正常化您的路径,使用os.path.normpath() function :

On Windows, it converts forward slashes to backward slashes.

所以规范化传递给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)

或规范化输入字符串:

关于python os.walk 显示混合的 windows 和 unix 路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53481285/

相关文章:

python - matplotlib 颜色条交替顶部底部标签

javascript - 是否可以使用网页作为用 python 编写的程序的用户界面,在本地运行,无需 Web 服务器?

java - 限制 App Engine 访问自定义域上的 G Suite 帐户

python - 如何用不同的 shell 调用 Popen?

python - fork 时的 multiprocessing.Queue 行为

python - 使用 glob 的多个文件扩展名来查找文件

python - 如何检查一个列表/字典的元素是否存在于python中的另一个列表/字典中

c++ - 发布程序

windows - 如何修改多个服务?

python - 更改目录中文件的名称: Python