繁体   English   中英

Python 无法识别 Windows 上包含回车的文件名

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM