【问题标题】:How do I solve for loop in python? [closed]如何解决python中的for循环? [关闭]
【发布时间】:2020-12-24 22:08:41
【问题描述】:

我有一个包含链接“elanlar”的列表 并有一个带有链接的 csv 文件。 我想检查“elanlar”列表中的每个项目: 如果列表中的任何链接存在于 csv 文件中,则打印该链接。 提前谢谢大家。

    elanlar = ['http://example.com/124124', 'http://example.com/523523']
    
    csv_file = csv.reader(open('file.csv', "r"), delimiter=",")
    
    for elan in elanlar:
    
        for row in csv_file:
            if len(row) <= 0:
                pass
            elif elan in row:
                print(row[0])
            else:
                pass

【问题讨论】:

  • 请解释您当前的代码有什么问题。
  • 为什么要嵌套 for 循环
  • 您的代码打印匹配行中的第一项,而不是匹配的链接。这是一个错误,还是您的问题描述有误?

标签: python loops csv for-loop


【解决方案1】:

一个打开的文件是一个流;只要有更多的行,你就可以读取行,但是一旦你到达文件的末尾,读取将不再产生任何东西。然后,您必须关闭并重新打开文件,或者将其倒回到开头。

当然,这里没有任何必要。只需阅读文件一次并检查每一行的所有条款。

elanlar = ['http://example.com/124124', 'http://example.com/523523']
    
csv_file = csv.reader(open('file.csv', "r"), delimiter=",")
    
for row in csv_file:
    for elan in elanlar:
        if elan in row:
            print(row[0])
            break

您可以使用any(),而没有close 的悬空open 很容易避免;

elanlar = ['http://example.com/124124', 'http://example.com/523523']

with open('file.csv', "r"), delimiter=",") as inputfile:
    csv_file = csv.reader(inputfile)
    for row in csv_file:
        if any(elan in row for elan in elanlar):
            print(row[0])

读取文件比比较多个字符串慢得多(即使这个数字是数千),所以您真的希望确保在可能的情况下只读取文件一次。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-14
    • 2018-08-12
    • 2013-08-23
    • 2022-01-21
    • 2019-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多