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

问题描述 投票:1回答:2

我想选择一个文件,但文件名包含回车符,所以.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'

python windows carriage-return
2个回答
2
投票

Windows不允许使用special characters in filename

  • 使用反斜杠()分隔路径的组件。反斜杠将文件名与路径中的文件名分开,并从路径中的另一个目录名中分隔一个目录名。您不能在实际文件或目录的名称中使用反斜杠,因为它是将名称分隔为组件的保留字符。
  • 使用当前代码页中的任何字符作为名称,包括扩展字符集(128-255)中的Unicode字符和字符,但以下情况除外:
  • 以下保留字符:
  • <(小于)
  • >大于)
  • :(冒号)
  • “(双引号)
  • /(正斜杠)
  • \(反斜杠)
  • | (竖杆或管)
  • ? (问号)
  • *(星号)
  • 整数值为零,有时也称为ASCII NUL字符。
  • 整数表示形式在1到31范围内的字符,但允许使用这些字符的备用数据流除外。有关文件流的更多信息,请参阅文件流。
  • 目标文件系统不允许的任何其他字符。

如果您从其他系统复制该文件,这可能是一个问题。如果需要在Windows中使用此文件,则可能需要在复制之前重命名该文件。


0
投票

在您的代码中,以下行是创建文件路径。您可以尝试删除其中的\r

local_file = os.path.join(local_path, filename)
© www.soinside.com 2019 - 2024. All rights reserved.