Как я могу присоединиться к 2 CSV в Python без использования Panda.? - PullRequest
0 голосов
/ 13 мая 2018

один CSV-файл имеет следующие столбцы

количество, длительность, элементы, id

1,na,na,123
2,na,na,456
3,na,na,789

Другой CSV-файл содержит

xyz_id, xyz_images

123,1
123,2
123,3
123,4
123,56
123,7
123,8
456,9
456,12
456,23

Если я не могу использовать панд, тогда как соединить эти 2 CSV-файла?

Желаемый вывод

xyz_id, xyz_images, количество, длительность, элементы, id

123,1,1,na,na,123
123,2,1,na,na,123
123,3,1,na,na,123
123,4,1,na,na,123
123,56,1,na,na,123
123,7,1,na,na,123
123,8,1,na,na,123
456,9,2,na,na,456
456,12,2,na,na,456
456,23,2,na,na,456

Мотивом было объединить идентификаторы обоих csv, чтобы объединить их в 1 файл.

with open('/home/user/Downloads/FW__Json_FIles/withoutpanda.csv') as f,open('/home/user/Downloads/FW__Json_FIles/forms.csv') as csvfile1:
reader1 = csv.reader(f,delimiter='|')
reader2=csv.reader(csvfile1,delimiter='|')
try:
    for row1 in reader1:
        print(row1[0])
    for row2 in reader2:
        print (row2[3])
except csv.Error as e:
    sys.exit('file {}, line {}: {}'.format(filename, reader.line_num, e))

После этого я не смог проверить, как объединить эти 2 файла, основываясь на этих двух ключах: row1 [0] и row2 [3]

1 Ответ

0 голосов
/ 13 мая 2018

Вы можете создать список списков для двух CSV и вручную выполнить объединение с циклом for:

records1=[]
with open('csvfile1', 'r') as f:
    for line in f:
        records1.append(line.split(','))

records2=[]
with open('csvfile2', 'r') as f:
    for line in f:
        records2.append(line.split(','))


for (count, duration, items, id_) in records1:
    for (xyz_id, xyz_images) in records2:
        if id_ == xyz_id:
            print(xyz_id, xyz_images, count, duration, items, id_, sep=',')

печать:

123,1,1,na,na,123
123,2,1,na,na,123
123,3,1,na,na,123
123,4,1,na,na,123
123,56,1,na,na,123
123,7,1,na,na,123
123,8,1,na,na,123
456,9,2,na,na,456
456,12,2,na,na,456
456,23,2,na,na,456

если число строк велико и производительность становится проблемой, рассмотрите возможность индексации данных в словарь списков и замените внутренний цикл for поиском по словарю.


Если вам нужно вывести все эти столбцы в CSV-файл, выполните следующие действия:

with open(sys.argv[1], "w") as of:
    writer=csv.writer(of,delimiter='|')
    for (count, duration, items, id_) in records1:
        for (xyz_id, xyz_images) in records2:
            if id_ == xyz_id:
                writer.writerow([xyz_id, xyz_images, count, duration, items, id_])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...