Python错误检查脚本非常慢

Python错误检查脚本非常慢,python,Python,我有以下程序,已经运行了大约两个小时,可能还有1/4的时间。我的问题如下: import csv input_csv = "LOCATION_ID.csv" input2 = "CITIES.csv" output_csv = "OUTPUT_CITIES.csv" with open(input_csv, "rb") as infile: input_fields = ("ID", "CITY_DECODED", "CITY", "STATE", "COUNTRY", "SPELL

我有以下程序,已经运行了大约两个小时,可能还有1/4的时间。我的问题如下:

import csv

input_csv = "LOCATION_ID.csv"
input2 = "CITIES.csv"
output_csv = "OUTPUT_CITIES.csv"

with open(input_csv, "rb") as infile:
    input_fields = ("ID", "CITY_DECODED", "CITY", "STATE", "COUNTRY", "SPELL1", "SPELL2", "SPELL3")
    reader = csv.DictReader(infile, fieldnames = input_fields)
    with open(input2, "rb") as infile2:
        input_fields2 = ("Latitude", "Longitude", "City")
        reader2 = csv.DictReader(infile2, fieldnames = input_fields2)
        next(reader2)
        words = []
        for next_row in reader2:
            words.append(next_row["City"])

        with open(output_csv, "wb") as outfile:
            output_fields = ("EXISTS","ID", "CITY_DECODED", "CITY", "STATE", "COUNTRY", "SPELL1", "SPELL2", "SPELL3")
            writer = csv.DictWriter(outfile, fieldnames = output_fields)
            writer.writerow(dict((h,h) for h in output_fields))
            next(reader)
            for next_row in reader:
                search_term = next_row["CITY_DECODED"]

                #I think the problem is here where I run through every city
                #in "words", even though all I want to know is if the city
                #in "search_term" exists in "words
                for item in words:
                    if search_term in words:
                        next_row["EXISTS"] = 1

                writer.writerow(next_row)
我这里有几个问题:

1鉴于input_csv有14k行,而input2只有6k行,为什么需要这么长时间?我知道最内部的for循环(从“for item in words:”开始)效率低下(见qtn 3),但我希望更多地了解幕后发生的事情,以便我(希望其他so用户)能够避免在我们的其他程序上犯同样的错误

2如果我希望此代码继续运行,这与我离开计算机并进入睡眠/休眠状态有什么关系?程序是否会在该点停止,但在计算机再次使用时自动重新启动?我真的很想知道,一旦运行一个程序,编译器是如何与操作系统交互的,当计算机与python程序相关时,“进入睡眠”意味着什么

和3此代码的更有效实现是什么?我认为这样做不会超过几分钟,对吗


非常感谢

让我们从我看到的一点低效开始:

for next_row in reader:
                search_term = next_row["CITY_DECODED"]
                for item in words:
                    if search_term in words:
                        next_row["EXISTS"] = 1
这是循环的外部
的14k次迭代。然后,在嵌套的
for
循环中,每次大约迭代6k次。然后,如果在Word中搜索术语,则需要进行更多的迭代,因为它会在Word上迭代,直到返回

我没有过多考虑这个算法实际上在做什么,但是您至少应该删除
words
(即
words=list(set(words))
)中的重复项

我正要在words
循环中发布关于项目的小
。你为什么这么做让我很困惑,因为从来没有使用过
,所以for循环是一个很大的时间浪费

最有可能的情况是:

for next_row in reader:
    search_term = next_row["CITY_DECODED"]
    if search_term in words:
        next_row["EXISTS"] = 1
    writer.writerow(next_row)
那么,让我们总结一下您的所有迭代:

~6k表示读取器中下一行的
:words.append(下一行[“城市])

对于reader:
中的下一行,
的约14k次迭代乘以总和(i,16000),约为2520亿次


去掉这个无关的循环会给你带来大约8400万次迭代,这是。。好吧,好多了。

两个文件中都没有重复的文件,我想额外的for循环使6k次额外迭代14k次就是这样做的。即使这样,虽然我认为每行只会增加一小部分额外的秒数,但是…嗯,这是8400万次迭代和5040亿次迭代(最坏情况)之间的差异。实际上,我猜这大约是2520亿次迭代,因为它是14000*(总和,16000)。