次のプログラムは約 2 時間実行されており、おそらくあと 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 には 14,000 行あり、input2 には 6,000 行しかないのに、なぜこんなに時間がかかるのでしょうか? 最も内側の for ループ ("for item in words:" で始まる) が非効率であることは理解しています (qtn 3 を参照)。願わくば、他の SO ユーザー) が、私たちの他のプログラムで同じ過ちを犯すのを避けることができます。
2このコードを引き続き実行したい場合、コンピュータを離れてスリープ/休止状態になることとどのように関連していますか? プログラムはその時点で停止しますが、コンピューターが再び使用されると、自動的に再起動しますか? プログラムを実行すると、コンパイラがオペレーティングシステムとどのように対話するのか、そしてPythonプログラムに関連するコンピュータが「スリープ状態になる」手段は何なのか、本当に疑問に思っています。
そして 3このコードのより効率的な実装は何ですか? これを行うのに数分以上かかるべきではないと考えるのは間違いではありませんよね?
どうもありがとう!