Записать общие элементы 2 CSV-файлов (с различным количеством столбцов) в одном файле - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть 2 CSV-файла следующего формата:

Файл1

David
Lennon

Файл2

David  0.3
Lennon 1.3
Wright 2.5

Требуемый вывод -

David 0.3
Lennon 1.3

Я читаю оба CSV-файла, а затем проверяю, присутствует ли тот же первый столбец в файле 2 или нет, и если он присутствует, я хочу сохранить его, а затем удалить остальные из них, но я не знаю, как перейти к первому элементу.

with open ('file1.csv') as h:
   an = h.readlines()
with open ('file2.csv') as n:
   non = n.readlines()

anno=[]
for i in an:
   anno.append(i.decode('utf-8').strip())

diff={}
for i in non:
   if i.decode('utf-8')[0].strip() in anno:
     diff[i[0]] = i[1]

Я получаю сообщение об ошибке в последней строке, как я полагаю, это неправильный способ доступа к первому и второму столбцам файла CSV.Как это сделать?

1 Ответ

0 голосов
/ 27 сентября 2018

Хорошо, прежде всего, если вы используете формат csv, убедитесь, что вы разделяете значения запятыми (csv = значения, разделенные запятыми).Поэтому измените file1 и file2 на это:

David
Lennon

и

David,0.3
Lennon,1.3
Wright,2.5

Хорошо, так что вы хотите получить только имена данных, которые присутствуют в file1 из file2, если я прав,Я изменил имена переменных на менее загадочные, потому что я не понимал, что вы подразумеваете под ними, но я сохранил последний словарь как diff (желаемый вывод) для ясности.

Теперь Чтение имен изfile1 и поместите их в список с readlines, однако там все еще есть некоторые нежелательные вещи в "\ n".Я заменяю символ новой строки ни на что в цикле for, после создания из него списка останутся только имена.

with open ("file1.csv") as file1:
   data_file1 = [name.replace("\n", "") for name in file1.readlines()]

Для файла2, выполняющего ту же функцию и создающего список, разделенныйзапятая так, «Давид, 0,3» становится [«Давид», «0,3»].Обратите внимание, что тип значений по-прежнему является строкой.

with open ("file2.csv") as file1:
   data_file2 = [name.replace("\n", "").split(",") for name in file1.readlines()]

Теперь сравниваем данные из файла1 и файла2:

diff = {}
for line in data_file2:
    if line[0] in data_file1:
        diff[line[0]] = line[1]

Здесь строка [0] - это имя и строка [1] соответствующее значение для этого имени.

Теперь diff должно вернуть

>>> diff
{'David': '0.3', 'Lennon': '1.3'}

Cheers, Jelle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...