Как проверить правильность заголовков столбцов в Python из файла CSV - PullRequest
0 голосов
/ 21 мая 2019

У меня есть файл CSV, содержащий данные, имеет следующие заголовки столбцов: first_name, last_name и email. Я хотел бы проверить, что файл CSV в том, что он должен иметь столбцы, упорядоченные в порядке, указанном выше. Я реализовал код, но проблема заключается в получении заголовков столбцов. Причина, по которой я настаиваю на проверке этого порядка, заключается в том, что я создаю объекты пациента, которые имеют поля firstname, lastname и email в качестве полей, и если CSV-файл будет переупорядочен, то неправильные данные будут добавлены в поля.

if file_serializer.is_valid():
    data = self.request.data.get('file')
    data_set = data.read().decode('UTF-8')
    io_string = io.StringIO(data_set)
    io_string = io.StringIO(data_set)
    next(io_string)

    for column in csv.reader(io_string, delimiter=',', quotechar="|"):
        # Add validation here
        print(column)
        obj, created = Patient.objects.get_or_create(
                firstname=column[0],
                lastname=column[1],
                email=column[2]
            )

CSV скриншот

enter image description here

Образец текста

first_name,last_name,email
Shaylynn,Klimentyev,sklimentyev0@cisco.com
Thaddeus,Grushin,tgrushin1@umn.edu
Hayden,Cranmer,hcranmer2@nationalgeographic.com
Colet,Ferfulle,cferfulle3@unesco.org
Ernestine,Hardi,ehardi4@virginia.edu
Freddi,Knagges,fknagges5@ifeng.com

Ответы [ 2 ]

2 голосов
/ 21 мая 2019

На самом деле не должно иметь значения, находятся ли столбцы в правильном порядке, если они имеют правильные заголовки столбцов.Вы можете использовать DictReader для обработки этих заголовков:

for row in csv.DictReader(io_string, delimiter=',', quotechar='|'):
    print(row['first_name'], row['last_name'], row['email'])

Если вы действительно настаиваете на проверке заказа, вы можете сделать это тоже:

list(row.keys()) == ['first_name', 'last_name', 'email']
0 голосов
/ 21 мая 2019
myiter = csv.reader(io_string, delimiter=',', quotechar="|")
header = next(myiter)
print("HEADER:", header)
for column in myiter:
    # Add validation here
    print(column)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...