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

时间:2019-02-08 09:30:24

标签: python windows carriage-return

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

2 个答案:

答案 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)