gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 21:57:19 27 4
gpt4 key购买 nike

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

我有一个包含很多不同文件的目录。我需要“.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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com