2016-09-22 16 views
-1

私はユニークな単語のリストを持つ2つのCSVファイルを持っています。私がそれらの交差点を完成した後、私は結果を得ますが、私は新しいファイルにそれを書き込もうとすると、それは2MBをはるかに下回るはずの、ほぼ155MBの非常に大きなサイズのファイルを作成します。新しいCSVに交差点データを書き込む

コード:

alist, blist = [], [] 

with open("SetA-unique.csv", "r") as fileA: 
    reader = csv.reader(fileA, delimiter=',') 
    for row in reader: 
     alist += row 

with open("SetB-unique.csv", "r") as fileB: 
    reader = csv.reader(fileB, delimiter=',') 
    for row in reader: 
     blist += row 

first_set = set(alist) 
second_set = set(blist) 

res = (first_set.intersection(second_set)) 

writer = csv.writer(open("SetA-SetB.csv", 'w')) 

for row in res: 
    writer.writerow(res) 
+0

1行に1単語しかありませんか? –

答えて

2

あなたは各反復上のファイルにセット全体resを書いています。おそらく、代わりに行を書きたい:

別に
for row in res: 
    writer.writerow([row]) 
+1

こんにちは、今はCSVに書き込んでいますが、すべての単語が複数の列に分割されています。例:アップル - > A | p | p | p | l | e –

+0

@MukeshKumarMishra私は答えを更新しました。 –

0

セット全体にあなたがまた、複数のセットやリストを作成する必要はありません各反復を書いてから、あなたは itertools.chain を使用することができます。

from itertools import chain 
with open("SetA-unique.csv") as file_a, open("SetB-unique.csv") as file_b,open("SetA-SetB.csv", 'w') as inter : 
    r1 = csv.reader(file_a) 
    r2 = csv.reader(file_b) 
    for word in set(chain.from_iterable(r1)).intersection(chain.from_iterable(r2)): 
     inter.write(word)+"\n" 

あなただけの言葉を書いている場合は、単に、上記のようにfile.writeを使うcsv.writerを使用する必要もありません。あなたは言葉の平らな反復可能なを作成するべきではありません

あなたが実際に賢明な比較行を行いしようとしている場合は、することができますタプルへのIMAP

from itertools import imap 
with open("SetA-unique.csv") as file_a, open("SetB-unique.csv") as file_b,open("SetA-SetB.csv", 'w') as inter : 
    r1 = csv.reader(file_a) 
    r2 = csv.reader(file_b) 
    writer = csv.writer(inter) 
    for row in set(imap(tuple, r1).intersection(imap(tuple, r2)): 
     writer.writerow(row) 

をそしてあなただけの1行につき1つの単語を持っている場合csv libはまったく必要ありません。

from itertools import imap 
with open("SetA-unique.csv") as file_a, open("SetB-unique.csv") as file_b,open("SetA-SetB.csv", 'w') as inter : 
    for word in set(imap(str.strip, file_a)).intersection(imap(str.strip, file_b)): 
     inter.write(word) + "\n" 
関連する問題