[英]Filename containing carriage return on Windows is not recognised by Python
我想选择一个文件,但文件名包含回车符,因此.isfile()
不断返回False
。 当我使用.fnmatch()
它会打印文件名,包括尾随回车。
import fnmatch
import os
local_path = 'd:'+os.sep
filename = '1F80813965EDAA4FC5BA44A91E0DBFF1'
local_file = os.path.join(local_path, filename+'\r')
print( os.path.isfile(local_file) )
# Returns False
for file in os.listdir(local_path):
if fnmatch.fnmatch(file, filename+'?'):
print(repr(file))
# Returns 'd:\\1F80813965EDAA4FC5BA44A91E0DBFF1\r'
这里有什么问题? 是 Windows 吗? 是NTFS分区吗? 还是os.path.join()
函数不理解'\\r'
?
Windows 不允许在 filename 中使用特殊字符:
[...]
- 使用反斜杠 (\\) 分隔路径的组件。 反斜杠将文件名与其路径分开,并将一个目录名与路径中的另一个目录名分开。 您不能在实际文件或目录的名称中使用反斜杠,因为它是将名称分隔为组件的保留字符。
[...]
- 使用当前代码页中的任何字符作为名称,包括 Unicode 字符和扩展字符集 (128–255) 中的字符,但以下字符除外:
- 以下保留字符:
- <(小于)
- > 大于)
- : (冒号)
- "(双引号)
- /(正斜杠)
- \\(反斜杠)
- | (垂直条或管)
- ? (问号)
- *(星号)
- 整数值零,有时称为 ASCII NUL 字符。
- 整数表示在 1 到 31 范围内的字符,但允许这些字符的备用数据流除外。 有关文件流的更多信息,请参阅文件流。
- 目标文件系统不允许的任何其他字符。
如果您从另一个系统复制文件,这可能是一个问题。 如果您需要在 Windows 中使用此文件,则可能需要在复制之前重命名它。
在您的代码中,以下行正在创建文件路径。 您可以尝试删除其中的\\r
。
local_file = os.path.join(local_path, filename)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.