Merge CSVs in Python with different columns

后端 未结 4 967
栀梦
栀梦 2021-02-05 18:47

I have hundreds of large CSV files that I would like to merge into one. However, not all CSV files contain all columns. Therefore, I need to merge files based on column name, no

4条回答
  •  没有蜡笔的小新
    2021-02-05 19:38

    The solution by @Aaron Lockey, which is the accepted answer has worked well for me except, there were no headers for the file. The out put had no headers and only the row data. Each column was without headings (keys). So I inserted following:

    writer.writeheader()
    

    and it worked perfectly fine for me! So now the entire code appears like this:

        import csv
        ``inputs = ["in1.csv", "in2.csv"]  # etc
    
        # First determine the field names from the top line of each input file
    
    `# Comment 1 below
    
        `fieldnames = []
    
    
      with open(filename, "r", newline="") as f_in:
        reader = csv.reader(f_in)
        headers = next(reader)
        for h in headers:
          if h not in fieldnames:
            fieldnames.append(h)
    
    # Then copy the data
    with open("out.csv", "w", newline="") as f_out:   # Comment 2 below
      writer = csv.DictWriter(f_out, fieldnames=fieldnames)
    writer.writeheader() #this is the addition.       
    for filename in inputs:
            with open(filename, "r", newline="") as f_in:
              reader = csv.DictReader(f_in)  # Uses the field names in this file
              for line in reader:
                # Comment 3 below
                writer.writerow(line)
    

提交回复
热议问题