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)与其他行进行比较。如果它们匹配,则它假定当前行是更新版本,因此将其覆盖。如果没有匹配,那么这是一个新条目。
我将每行的数据存储在字典中,然后将其存储在列表“l”中。
处理好所有文件后,我将列表“l”以指定的格式输出到“MasterFile.csv”。
---问题---
“File_1.csv”的最后一行和“File_2.csv”的第一行最终在输出文件的同一行。我希望它继续开辟新的路线。
- 视觉
...
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 :(得分: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"])
答案 1 :(得分:0)
我尝试运行你的程序,没关系。你唯一的问题是在
行with open(expFileName, "a") as expFile:
您使用"a"
(作为附加),因此如果您反复运行程序,它将追加到此文件。
使用"w"
代替"a"
。
答案 2 :(得分:0)
A'ight伙计们。我想我做了一个booboo。
1)因为我最后使用的是“a”(追加)而不是“w”(写);我最近的2或3次测试我忘了清除文件,我总是看着相同的(前50个左右)行。这意味着我早就修复了我的错误,但仍在查看旧数据......
2)回车被读入字典的最后一个值(data_6),所以当它们被附加到主文件时,我最后得到了“\ r \ n \ n \ n”。
感谢Vivek Srinivasan扩展我的python知识。我会看看大熊猫并玩一玩。
感谢MarianD指出“a”/“w”错误。
感谢Moses Koledoye指出“\ r”错误。
抱歉浪费你的时间。