2016-11-10 5 views
0
import csv 

impFileName = [] 
impFileName.append("file_1.csv") 
impFileName.append("file_2.csv") 

expFileName = "MasterFile.csv" 
l = [] 
overWrite = False 
comma = "," 

for f in range(len(impFileName)): 
    with open(impFileName[f], "r") as impFile: 
     table = csv.reader(impFile, delimiter = comma) 

     for row in table: 
      data_1 = row[0] 
      data_2 = row[1] 
      data_3 = row[2] 
      data_4 = row[3] 
      data_5 = row[4] 
      data_6 = row[5] 

     dic = {"one":data_1, "two":data_2, "three":data_3, "four":data_4, "five":data_5, "six":data_6} 

     for i in range(len(l)): 
      if l[i]["one"] == data_1: 
       print("Data, where one = " + data_1 + " has been updated using the data from " + impFileName[f]) 
       l[i] = dic 
       overWrite = True 
       break 

     if overWrite == False: 
      l.append(dic) 
     else: 
      overWrite = False 
    print(impFileName[f] + " has been added to the list 'l'") 

with open(expFileName, "a") as expFile: 
    print("Master file now being created...") 
    for i in range(len(l)): 
     expFile.write(l[i]["one"] + comma + l[i]["two"] + comma + l[i]["three"] + comma + l[i]["four"] + comma + l[i]["five"] + comma + l[i]["six"] + "\r\n") 

print("Process Complete") 

このプログラムは2つ以上の.csvファイルを使用し、各行のuniqueID(data_1)を他のものと比較します。一致した場合、現在の行が更新されたバージョンであるとみなして上書きします。一致するものがなければ、それは新しいエントリです。" r n"はcsvファイルの最後で無視されます

各行のデータを辞書に格納し、それをリスト "l"に格納します。

すべてのファイルが処理されたら、リスト "l"を指定された形式で "MasterFile.csv"に出力します。

---問題点---
「File_1.csv」の最後の行と「File2.csv」の最初の行は、出力ファイルの同じ行になります。私はそれを新しい行で続けたいと思います。

--visual

... 
data_1,data_2,data_3,data_4,data_5,data_6 
data_1,data_2,data_3,data_4,data_5,data_6DATA_1,DATA_2,DATA_3,DATA_4,DATA_5,DATA_6 
DATA_1,DATA_2,DATA_3,DATA_4,DATA_5,DATA_6 
... 

注:.CSVファイルのいずれかにはヘッダー行がありません。
"expFile.write"の最後に "\ n"だけを使用してみました - 同じ結果

+0

最初のファイルの最後の行に改行文字はありません。これは珍しいことではありません。あなたは手作業で挿入する必要があります –

+0

確かに、私はそれらを "expFile.Write"行に挿入しています。 "write"の最後に "\ r \ n"( "\" n "改行)? – marmitegeek

答えて

0

A'ight guys。私はブービーを作ったと思う。

1)私は最後に "w"(書き込み)ではなく "a"(追加)を使用していたので、私がファイルをクリアするのを忘れてしまった私の最後の2〜3回のテストでは、私はいつも同じ(トップ50程度)行を見ていました。これは私が以前バグを修正したのですが、まだ古いデータを見ていたことを意味しました....

2)キャリッジリターンは辞書(data_6)の最後の値に読み込まれていました。マスターファイル私は最後に "\ r \ r \ n"で終わった。

おかげさまで、私のpythonの知識を広げてくれたVivek Srinivasanさん。私はパンダを見て遊びに行きます。

"a"/"w"エラーを指摘してくれたMarianDに感謝します。

"\ r"というエラーを指摘してくれたMoses Koledoyeに感謝します。

ご迷惑をおかけして申し訳ありません。

1

ちょっとした提案です。あなたの方法で2つのファイルを比較することはあまりにも高価に見えます。以下の方法でpandasを試してください。

import pandas 
data1 = pandas.read_csv("file_1.csv") 
data2 = pandas.read_csv("file_2.csv") 

# Merging Two Dataframes 
combinedData = data1.append(data2,ignore_index=True) 

# Dropping Duplicates 
# give the name of the column on which you are comparing the uniqueness 
uniqueData = combinedData.drop_duplicates(["columnName"]) 
0

私はあなたのプログラムを実行しようとしましたが正常です。あなたの唯一の問題はラインあなたが"a"(APPENDとして)使用

with open(expFileName, "a") as expFile: 

であるので、あなたは何度も何度もあなたのプログラムを実行する場合、それはこのファイルにを追加します。

"a"の代わりに"w"を使用してください。

関連する問題