Python遍历列表删除.txt后缀错误链接未生效问题求解
问题根因
两种写法失效的原因分别是:
- 第一种边遍历原列表边执行
remove()的写法是Python常见误区:遍历过程中动态删除元素会导致列表索引实时偏移,部分元素会直接被跳过,造成漏删。同时判断逻辑本身也有错误:str.find('.txt')找到匹配时返回匹配位置的非负整数,未找到时返回-1,这两类值在Python布尔判断里都属于真值,条件永远成立,逻辑完全写反。 - 第二种正则写法逻辑偏差:代码是把匹配到txt的链接内容替换为空,而非直接过滤掉整条链接,无法得到正确结果。
正确实现方案
最简洁高效的方案是使用列表推导式,直接通过字符串方法判断后缀过滤,不需要引入正则:
out1 = ['https://www.itu.int./htmldoc.asp?doc=t\\rec\\q\\T-REC-Q.1238.3-200006-I!!SUM-TXT-E.txt', 'https://www.itu.int/dms_pubrec/itu-t/rec/q/T-REC-Q.1248.1-200107-I!!SUM-HTM-E.htm', 'https://www.itu.int./htmldoc.asp?doc=t\\rec\\q\\T-REC-Q.1238.4-200006-I!!SUM-TXT-E.txt', 'https://www.itu.int./htmldoc.asp?doc=t\\rec\\x\\T-REC-X.42-200003-S!!SUM-TXT-E.txt', 'https://www.itu.int/rec/recommendation.asp?lang=en&parent=T-REC-X.51-198811-I',] res = [url for url in out1 if not url.endswith('.txt')] print(res)
运行输出符合预期:
[ 'https://www.itu.int/dms_pubrec/itu-t/rec/q/T-REC-Q.1248.1-200107-I!!SUM-HTM-E.htm', 'https://www.itu.int/rec/recommendation.asp?lang=en&parent=T-REC-X.51-198811-I' ]
如果存在链接末尾带查询参数、
.txt不在字符串最末尾的场景,可以把判断条件换成if '.txt' not in url,适配范围更广。
如果需要用正则实现,核心是做匹配判断而非内容替换,参考写法:
import re res = [url for url in out1 if not re.search(r'\.txt$', url)]
其中正则r'\.txt$'表示匹配字符串结尾的.txt,和endswith()效果一致。
内容的提问来源于stack exchange,提问作者Yuliia
相关产品推荐
相关产品推荐

