Ark*_*gel 2 syntax if-statement list python-2.7
我刚刚在删除包含某些字符串问题的行上阅读了Sloth的精彩回复,同时寻找一种方法来过滤掉 txt/csv 文件中的垃圾行。要点是“从输入文件中获取 xyz 单词/字符串/任何内容,然后过滤每一行,只写未过滤的行。”
他贴出的代码是:
bad_words = ['bad', 'naughty']
with open('oldfile.txt') as oldfile, open('newfile.txt', 'w') as newfile:
for line in oldfile:
    if not any(bad_word in line for bad_word in bad_words):
        newfile.write(line)
我的问题是:有人会解释这条线if not any(bad_word in line for bad_word in bad_words):吗?
我试过只输入,if not any(bad_word in line):但它给了我一个错误。  
我试图理解为什么。在 python 文档网页上粗略搜索并没有帮助我(我是 Python/编程的新手,可能不太聪明,无法启动 :-))。
感谢我阅读的任何参考资料。
谢谢!
有人会解释这条线吗
if not any(bad_word in line for bad_word in bad_words)
当然。
bad_word in line for bad_word in bad_words就是所谓的生成器表达式。它与列表理解非常相似,但内存效率更高。
if not any(bad_word in line for bad_word in bad_words):
    newfile.write(line)
基本上相当于:
list1 = []
for bad_word in bad_words:
    if bad_word in line:
        list1.append(True)
    else:
        list1.append(False)
if not any(list1):
    newfile.write(line)
我试过只放进去,
if not any(bad_word in line):但它给了我一个错误
是的,因为any将一个可迭代对象作为输入,并且您提供了一个布尔值(bad_word in line计算结果为 True 或 False,您无法对其进行迭代)。
尝试提供可以迭代的内容,例如列表:if not any([True, False, True]):
| 归档时间: | 
 | 
| 查看次数: | 17542 次 | 
| 最近记录: |