2016-11-10 190 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)与所有其他行进行比较。如果它们匹配,则认为当前行是更新版本,因此将其覆盖。如果没有匹配,那么这是一个新的条目。csv文件末尾忽略“ r n”

我将每一行的数据存储在一个字典中,然后存储在列表“l”中。

一旦所有的文件都被处理完毕,我会以指定的格式输出列表“l”到“MasterFile.csv”。

---问题---
“File_1.csv”的最后一行和“File_2.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”行 - 在'写入'结尾处插入“\ r \ n”(“\ r”回车符,“\ n“换行)? – marmitegeek

回答

0

A'ight guys。我想我做了一个booboo。 1)因为我在最后使用了“a”(追加)而不是“w”(写)以及我忘记清除文件的最后2或3次测试,我一直在查看同样的(前50个左右)行。这意味着我早已修复了我的bug,但仍在查看旧数据......

2)回车正在读入字典的最后一个值(data_6),所以当它们被追加到主文件最后以“\ r \ r \ n”结尾。

感谢Vivek Srinivasan为扩大我的Python知识。我会看熊猫并且玩一玩。

感谢MarianD指出“a”/“w”错误。

感谢Moses Koledoye指出“\ r”错误。

对不起,浪费你的时间。

1

只是一点建议。以您的方式比较两个文件看起来太昂贵了。按以下方式尝试使用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

我试着运行你的程序,它是确定的。你唯一的问题是在该行

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

在您使用"a"(如追加),所以如果你一次又一次地运行您的程序,它会追加此文件。

使用"w"而不是"a"