2017-08-14 53 views
0

我正在尝试读取CSV文件并将其中的行写入另一个csv文件。我的输入文件有重复的行。在输出中,我只需要单行。从我的示例脚本中,您可以看到我创建了一个名为“读者”的列表。该列表获得了输入csv的所有行。然后在for循环中,我使用writer.writerow(读者[1] + ....),它基本上读取标题后面的第一行。但问题是这第一行是重复的。我如何调整我的脚本,使它只执行一次?忽略CSV上的重复行

for path in glob.glob("out.csv"): 
    if path == "out1.csv": continue 
    with open(path) as fh: 
     readers = list(csv.reader(fh)) 

     for row in readers: 

      if row[8] == 'READ' and row[10] == '1110': 

       writer.writerow(readers[1] + [] + [row[2]]) 
      elif row[8] == 'READ' and row[10] == '1011': 
       writer.writerow(readers[1] + [] + [" "] + [" "] + [" "] + [row[2]]) 
      elif row[8] == 'READ' and row[10] != ('1101', '0111'): 
       writer.writerow(readers[1] + [] + [" "] + [row[2]]) 

采样输入

ID No. Name Value RESULTS 
     28 Jason 56789 Fail 
     28 Jason 56789 Fail 
     28 Jason 56789 Fail 
     28 Jason 56789 Fail 
+0

行是否已排序(即,我们可以预计重复出现在另一个旁边吗?或者脚本是否也需要这样做? – Dan

+0

对不起,请您详细说明一下,您在这里排序的意思是什么?我想在我的脚本中进行更改,以便只写一次相同的行。目前它重复相同的行。 – Muscles

回答

0

您可以使用set类型删除重复

readers_unique = list(set(readers))

1

您可以使用熊猫包。这将是这样的:

import pandas as pd 
# Read the file (considering header by default) and save in variable: 
table = pd.read_csv() 
# Drop the duplicates: 
clean_table = table.drop_duplicates() 
# Save clean data: 
clean_table.to_csv("data_without_duplicates.csv") 

您可以检查引用here,并here

0

虽然上述答案是基本上是正确的,用熊猫的,这似乎有点小题大做了我。只需使用列表中包含您在处理过程中已经看到的ID列值(假设ID列获得其名称,否则您必须使用组合键)。然后检查你是否已经看到了这个值和“presto”:

ID_COL = 1 
id_seen = [] 
for path in glob.glob("out.csv"): 
    if path == "out1.csv": continue 
    with open(path) as fh: 
     for row in csv.reader(fh): 
      if row[ID_COL] not in id_seen: 
       id_seen.append(row[ID_COL]) 
       # write out whatever column you have to 
       writer.writerow(readers[1] + [] + [row[2]])