python - 从目录中的文件列表中删除元素

标签 python list

我有一个小问题,我不明白为什么我的程序会这样做。 你能帮我吗?

我有一个包含很多不同文件的目录。 我需要“.TXT”文件的列表(是的,大写)。

我的代码:

def listFile():
    files = [f for f in os.listdir('.') if os.path.isfile(f)]
    for f in files:
        if (f[-4:] != ".TXT"):
            del files[files.index(f)]

但我不知道为什么列表不仅仅包含“.TXT”元素。

我的目录的元素:

['OrdinaFile0.3.py', 'OrdinaFile0.4-p2.py', 'OrdinaFile0.4-p3.py', 'OrdinaFile0.5-p2.py', 'OrdinaFile0.6-p2.py', 'TxtToXls-p2.py', 'aula1.TXT', 'testFiles.py', 'testxlwt.py']

代码生成的列表:

['OrdinaFile0.3.py', 'OrdinaFile0.4-p2.py', 'OrdinaFile0.6-p2.py', 'aula1.TXT']

你有什么想法吗?谢谢。

最佳答案

这可以通过 glob 模块轻松完成:

import glob, os
files = [f for f in glob.glob('*.TXT') if os.path.isfile(f)]

请注意,并非所有操作系统(例如 Windows)都区分大小写的文件名,因此对于此类操作系统,.txt.TXT 是相同的。

您的代码的问题是您在迭代列表时修改了列表,不要这样做。相反,迭代浅拷贝。

来自docs :

To change a sequence you are iterating over while inside the loop (for example to duplicate certain items), it is recommended that you first make a copy. Looping over a sequence does not implicitly make a copy. The slice notation makes this especially convenient:

for f in files[:]:
   ...

关于python - 从目录中的文件列表中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19962045/

相关文章:

python - 如何在 Django 中正确设置多个项目的环境设置?

python - 如何删除列表中的唯一字典和重复字典?

python - 添加以列出类实例

list - lisp - 要构造或列表的字符串

list - 在谓词响应中评估 s(N),而不丢失功能

python - 如何在python中输入字母

Python 2.7 : check if default argument passed with a decorator

python - 随机矩阵 : int() argument must be a string or a number, 不是 'tuple'

python - 将 python 字典追加到列表中

WPF MVVM : View's ListBox with source deep in Model. 如何实现?