我想选择一个文件,但文件名包含回车符,所以.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不允许使用special characters in filename:
- 使用反斜杠()分隔路径的组件。反斜杠将文件名与路径中的文件名分开,并从路径中的另一个目录名中分隔一个目录名。您不能在实际文件或目录的名称中使用反斜杠,因为它是将名称分隔为组件的保留字符。
- 使用当前代码页中的任何字符作为名称,包括扩展字符集(128-255)中的Unicode字符和字符,但以下情况除外:
- 以下保留字符:
- <(小于)
- >大于)
- :(冒号)
- “(双引号)
- /(正斜杠)
- \(反斜杠)
- | (竖杆或管)
- ? (问号)
- *(星号)
- 整数值为零,有时也称为ASCII NUL字符。
- 整数表示形式在1到31范围内的字符,但允许使用这些字符的备用数据流除外。有关文件流的更多信息,请参阅文件流。
- 目标文件系统不允许的任何其他字符。
如果您从其他系统复制该文件,这可能是一个问题。如果需要在Windows中使用此文件,则可能需要在复制之前重命名该文件。
在您的代码中,以下行是创建文件路径。您可以尝试删除其中的\r
。
local_file = os.path.join(local_path, filename)