JSON(185,000行)とCSV(650,000)の2つのファイルがあります。私はpart_numbers
の各部分を反復処理し、それを比較して、その部分がCSVで見つかった場所から最初の3文字を取得することがJSONファイル内の各辞書を反復する必要があります。2つの大きなファイルを比較し、一致する情報を組み合わせる
何らかの理由で、私はこれを正しく行うのに苦労しています。私のスクリプトの最初のバージョンはあまりにも遅かったので、私は
JSON例それをスピードアップしようとしています:
[
{"category": "Dryer Parts", "part_numbers": ["ABC", "DEF", "GHI", "JKL", "MNO", "PQR"], "parent_category": "Dryers"},
{"category": "Washer Parts", "part_numbers": ["ABC", "DEF", "GHI", "JKL", "MNO", "PQR"], "parent_category": "Washers"},
{"category": "Sink Parts", "part_numbers": ["ABC", "DEF", "GHI", "JKL", "MNO", "PQR"], "parent_category": "Sinks"},
{"category": "Other Parts", "part_numbers": ["ABC", "DEF", "GHI", "JKL", "MNO", "PQR"], "parent_category": "Others"}
]
CSV:
WCI|ABC
WPL|DEF
BSH|GHI
WCI|JKL
エンドdictのは次のようになりますが以下の下:
{"category": "Other Parts",
"part_numbers": ["WCIABC","WPLDEF","BSHGHI","JKLWCI"...]}
ここで私はこれまでのところ、それはでIndexError: list index out of range
を返し、が行われてきたものの一例です:
import csv
import json
from multiprocessing import Pool
def find_part(item):
data = {
'parent_category': item['parent_category'],
'category': item['category'],
'part_numbers': []
}
for part in item['part_numbers']:
for row in reader:
if (part.rstrip() == row[1]):
data['part_numbers'].append(row[0] + row[1])
with open('output.json', 'a') as outfile:
outfile.write(' ')
json.dump(data, outfile)
outfile.write(',\n')
if __name__ == '__main__':
catparts = json.load(open('catparts.json', 'r'))
partfile = open('partfile.csv', 'r')
reader = csv.reader(partfile, delimiter='|')
with open('output.json', 'w+') as outfile:
outfile.write('[\n')
p = Pool(50)
p.map(find_part, catparts)
with open('output.json', 'a') as outfile:
outfile.write('\n]')
その時点で「行」とは何ですか?前の行はいくつ処理しましたか?また、(投稿のガイドラインごとに)*最小*コードを投稿することができますか、問題の精神的な部分を読んでいるファイルですか? – Prune
ファイルの読み込みは実際問題ではありません。これを効率的に行う方法の詳細です。どんなコードが必要ですか? –
コードはありません... * less *。しかし、私はコードを実行することができなくてもそれを見つけたと思う。 – Prune