python os.walk 显示混合 windows 和 unix 路径
python os.walk displays mixed windows and unix paths
我正在尝试识别文件夹中具有特定名称的所有文件。我正在使用标准代码来执行此操作,如下所示:
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 函数找到的所有后续子文件夹都有 windows 斜杠:"\"
所以最后我得到了无法立即使用的无效路径。这是 python os 库中的错误还是实际上是什么?
目前我可以轻松地用正确的分隔符替换错误的分隔符,但我想知道这是否是唯一的方法?
这里没有实际问题。 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)
或规范化输入字符串:
使用os.path.join(path).replace("\","/")
或os.path.normpath().replace("\","/")
会将路径转换为所有正斜杠'/
'
我正在尝试识别文件夹中具有特定名称的所有文件。我正在使用标准代码来执行此操作,如下所示:
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 函数找到的所有后续子文件夹都有 windows 斜杠:"\"
所以最后我得到了无法立即使用的无效路径。这是 python os 库中的错误还是实际上是什么?
目前我可以轻松地用正确的分隔符替换错误的分隔符,但我想知道这是否是唯一的方法?
这里没有实际问题。 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)
或规范化输入字符串:
使用os.path.join(path).replace("\","/")
或os.path.normpath().replace("\","/")
会将路径转换为所有正斜杠'/
'