Запрос в редактировании файла CSV - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть имена столбцов в списке, и я хочу присвоить значение 1 этим именам столбцов и присвоить значение 0 остальным столбцам.Пример.

perms_name = ['name','place','thing']

Изначально CSV выглядит так:

name,age,place,thing,phone_no

Я хочу, чтобы CSV выглядел следующим образом:

name,age,place,thing,phone_no
1,0,1,1,0

Я могу сделать это просто так

with open('eggs.csv','a') as csvfile:
    fieldname = ["name","age","place","thing","phone_no"]
    writer = csv.DictWriter(csvfile,fieldnames=fieldname)
    writer.writeheader()

    writer.writerow(
        {'name': 1,'age':0,'place':1,'thing':1,'phone_no':0}
    )

, но это их более быстрый способ, в этом случае их всего 5 столбцов, что если их 100 столбцов, и я хочу назначить 1 только столбцам, упоминаемым в списке.

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

альтернативно ответу jpp, вы можете использовать немного запутанное понимание списка для построения словаря.

perms_name = ['name','place','thing']
fieldname = ['name', 'age', 'place', 'thing', 'phone_no']
d = {field : (1 if field in perms_name else 0) for field in fieldname}
# {'name': 1, 'age': 0, 'place': 1, 'thing': 1, 'phone_no': 0}

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

0 голосов
/ 22 ноября 2018

Вы можете распаковать встроенные словари в Python 3 через оператор **.В сочетании с dict.fromkeys нет необходимости явно записывать ключи и значения для каждого поля:

perms_name = ['name','place','thing']
fieldname = ['name', 'age', 'place', 'thing', 'phone_no']

d = {**dict.fromkeys(fieldname, 0), **dict.fromkeys(perms_name, 1)}

{'age': 0, 'name': 1, 'phone_no': 0, 'place': 1, 'thing': 1}

Определите свой словарь один раз, а затем используйте:

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