Соединение двух CSV-файлов после того, как я использовал dictreader - PullRequest
0 голосов
/ 08 октября 2011

Я новичок в Python и пытаюсь взять около 30 CSV-файлов, все с одинаковыми заголовками, но с разными данными в каждом файле и объединить в один. Пока я притворяюсь, что у меня есть только два файла, один с информацией о идентификационных номерах 1,2 и 3, а другой с информацией о 4,5 и 6 До сих пор мне удалось взять файлы и использовать dictreader для создания набора словарей с одинаковыми ключами, но я не могу понять, как взять значения, соответствующие каждому ключу, и объединить их в один большой файл. со всеми данными вместе.

Вот как далеко я дошла:)

for filename in os.listdir(os.getcwd()):
  root, ext = os.path.splitext(filename)
  if root.startswith('file1') and ext == '.csv':
      upload1 = filename
  if root.startswith('file2') and ext == '.csv':
      upload2 = filename

file_upload1 = open(upload1, 'rU')
data_upload1 = csv.DictReader(file_upload1)

for row in data_upload1:
  print row

И то же самое для upload2. И тогда я получаю вывод, как это;

{'ID': '1', 'name': 'bert', 'age': '30'}
{'ID': '2', 'name': 'ernie', 'age': '40'}
{'ID': '3', 'name': 'pinky', 'age': '50'}
{'ID': '4', 'name': 'perky', 'age': '60'}
etc

И что я хотел бы сделать, это один CSV-файл с одним столбцом для идентификаторов 1,2,3,4,5,6, а затем столбец для каждого соответствующего имени, каждого соответствующего возраста и т. Д.

Может кто-нибудь подсказать, как мне этого добиться? Извините за вопрос новичка.

1 Ответ

0 голосов
/ 08 октября 2011

Вы получите генератор диктов при вызове csv.DictReader ().Скажем, у нас есть 2 файла: "f1.csv" и "f2.csv", и каждый из них содержит несколько записей.


    import csv

    fp1, fp2 = open("f1.csv"), open("f2.csv")
    ld1, ld2 = csv.DictReader(fp1), csv.DictReader(fp2) #ld1 and ld2 are *generators*

    res = []  #our result will be stored here(LIST of dicts)
    ds = [ld1, ld2]    #list of generators

затем , итерируйте по ds, добавляя каждую пару kv от каждого dict к res dict, например так:

for d in ds: #each d is a generator
    for e in d: #each e is a dict
        res.append(e)

Это разрешениесписок, который содержит советы из обоих источников.Просто выполните итерацию и напишите их.

Обратите внимание, что вы можете сделать код более надежным / эффективным, но сначала просто поймите метод:)

regards,

Yati Sagade

...