【问题标题】:Python does not recognise text files in a directoryPython 无法识别目录中的文本文件
【发布时间】:2014-02-10 09:25:32
【问题描述】:

下面这段代码工作正常,读取指定目录下的所有文本文件:

files_ = glob.glob('D:\Test files\Case 1\*.txt')

但是当我将路径更改为另一个目录时,它会给我一个空的文件列表:

files_ = glob.glob('D:\Test files\Case 2\*.txt')
print files_ >> []

两个目录都包含几个文本文件。文本文件的名称和大小是不同的。 它真的很连线,我想不出任何办法来解决这个问题。有人遇到过这样的问题吗?

【问题讨论】:

  • 该目录上os.listdir 的输出是什么?
  • 实际路径是D:\Test files\B1\1rgbos.listdir 给出错误:WindowsError: [Error 123] The filename, directory name, or volume label syntax is incorrect: 'D:\\Test files\\B1\x01rgb/*.*'
  • 您需要使用正斜杠,如'D:/Test files/Case 2/*.txt',原始字符串前缀,如r'D:\Test files\Case 2\*.txt',或转义字符串中的反斜杠字符,如'D:\\Test files\\Case 2\\*.txt' 用于Windows 路径。此外,如果它们包含空格字符,您可能还需要将它们括在双引号 " 字符中,例如 r'"D:\Test files\Case 2\*.txt"'
  • 感谢@martineau,双反斜杠完成了这项工作。但是为什么单个反斜杠适用于第一个目录,而不适用于另一个目录?目录名重要吗?
  • @PyLearner:不确定你的意思——字符串中的所有反斜杠都需要加倍才能表示单个文字 \ 字符。

标签: python directory filepath glob


【解决方案1】:

你需要转义你的反斜杠:

files_ = glob.glob('D:\\Test files\\Case 2\\*.txt')

或者指定你的字符串是一个原始字符串(意思是反斜杠不应该被特殊解释):

files_ = glob.glob(r'D:\Test files\Case 2\*.txt')

破坏您的第二个glob 的原因是\1 变成了ASCII 控制字符\x01。错误消息包含一个线索:

WindowsError: [Error 123] The filename, directory name, or volume label syntax is incorrect: 'D:\\Test files\\B1\x01rgb/*.*'

注意\1 是如何变成文字\x01 的。您的第一个目录工作的原因是您基本上很幸运并且没有意外指定任何特殊字符:

'\T'
Out[27]: '\\T'

'\B'
Out[28]: '\\B'

'\1'
Out[29]: '\x01'

【讨论】:

  • 非常感谢您的解释:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-10
  • 1970-01-01
相关资源
最近更新 更多