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