Из файла CSV я хочу прочитать только 3 столбца:
{Id, name, approve}
Но когда пользователь загружает файл CSV, он может получить дополнительную информацию в случайном порядке, например:
{approve, reject, Id, foreign, name, approve, description}
До сих пор мне удавалось сопоставлять только при наличии «разрешенных заголовков» в загруженном csv (код ниже работает).
Но как я могу прочитать данные из этих » столбцы разрешенных заголовков (учитывая, что их индексная позиция может быть в произвольном порядке)?
Мой код (forms.py)
def clean(self):
uploaded_csv_file = self.cleaned_data['csv_file']
allowed_headers = {'id','name','approve'}
validation_errors = []
if uploaded_csv_file:
filename = uploaded_csv_file.name
if not filename.endswith(settings.FILE_UPLOAD_TYPE):
raise forms.ValidationError("Please upload .csv extension files only")
# django InMemoryUploadedFile returns bytes and we need strings
rows = csv.reader(StringIO(uploaded_csv_file.read().decode('utf-8')))
header = next(rows)
csv_fields = set(header)
csv_fields = {field.lower() for field in csv_fields}
result = all(elem in allowed_headers for elem in csv_fields) # Check if list1 contains all elements of list2 using all()
if not result:
validation_errors.append(
ValidationError('Your file could not be processed. You should provide %s columns in the file' % ', '.join(allowed_headers)))
Заранее спасибо:)