【问题标题】:os.listdir() not printing out all filesos.listdir() 没有打印出所有文件
【发布时间】:2017-07-26 15:09:09
【问题描述】:

我有一堆文件和几个文件夹。我正在尝试将 zip 附加到列表中,以便可以在代码的其他部分中提取这些文件。它永远找不到拉链。

for file in os.listdir(path):
     print(file)
     if file.split(".")[1] == 'zip':
     reg_zips.append(file)

路径很好,否则它不会打印出任何东西。它每次都拾取相同的文件,但不会拾取任何其他文件。它会提取目录中大约 1/5 的文件。

完全不知所措。通过在代码中添加 time.sleep(3),我确保文件可用性的一些奇怪的竞争条件不是问题。没解决。

【问题讨论】:

  • 文件名中是否有多个.file.endswith('.zip') 有效吗?
  • 谢谢。把它作为答案,我会标记它。我会把它归结为筋疲力尽。

标签: python file directory listdir


【解决方案1】:

您的文件中可能包含多个句点。尝试使用str.endswith:

reg_zips = []
for file in os.listdir(path):
     if file.endswith('zip'):
         reg_zips.append(file)

另一个好主意(感谢 Jean-François Fabre!)是使用 os.path.splitext,它可以很好地处理扩展:

if os.path.splitext(file)[-1] == '.zip':
    ... 

更好的解决方案,我推荐使用glob.glob 函数:

import glob
reg_zips = glob.glob('*.zip')

【讨论】:

  • 或使用os.path.splitext 很好地处理最后一个点。
【解决方案2】:
reg_zips = [z for z in os.listdir(path) if z.endswith("zip")]

【讨论】:

  • 请解释你的代码是做什么的以及它是怎么做的。
  • @M-Chen-3 我可以将其解释为提出问题的人。这是一个在内存中执行此操作的列表生成器:对于目录路径中返回的文件列表中的每个文件,如果它以 zip 结尾,则将其作为“reg_zips”放入内存中。这是一种pythonic的做事方式。如果它解决了我的错误的性质,我会将其标记为已回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-30
  • 1970-01-01
  • 1970-01-01
  • 2016-02-27
  • 1970-01-01
相关资源
最近更新 更多