Извлечение нечувствительных к регистру слов из списка в django
Я извлекаю значения из файла csv и сохраняю их в списке. Проблема в том, что если нет точного совпадения, элементы/строки не извлекаются. Как я могу осуществить поиск по списку без учета регистра в Django/Python?
def csv_upload_view(request):
print('file is being uploaded')
if request.method == 'POST':
csv_file_name = request.FILES.get('file')
csv_file = request.FILES.get('file')
obj = CSV.objects.create(file_name=csv_file)
result = []
with open(obj.file_name.path, 'r') as f:
f.readline()
reader = csv.reader(f)
#reader.__next__()
for row in reader:
data = str(row).strip().split(',')
result.append(data)
transaction_id = data[1]
product = data[2]
quantity = data[3]
customer = data[4]
date = parse_date(data[5])
try:
product_obj = Product.objects.get(name__iexact=product)
except Product.DoesNotExist:
product_obj = None
print(product_obj)
return HttpResponse()
Если то, что вы пытаетесь сделать, это просто поиск строки, чувствительной к регистру в, то все, что вам нужно сделать, это понизить регистр вашего поиска и вашего запроса (или повысить).
Вот пересмотренный код
def csv_upload_view(request):
print('file is being uploaded')
if request.method == 'POST':
csv_file_name = request.FILES.get('file')
csv_file = request.FILES.get('file')
obj = CSV.objects.create(file_name=csv_file)
result = []
with open(obj.file_name.path, 'r') as f:
f.readline()
reader = csv.reader(f)
#reader.__next__()
for row in reader:
data = str(row).strip().lower().split(',')
result.append(data)
_, transaction_id, product, quantity, customer, date, *_ = data
date = parse_date(date)
try:
product_obj = Product.objects.get(name__iexact=product)
except Product.DoesNotExist:
product_obj = None
print(product_obj)
return HttpResponse()
Затем, когда вы пытаетесь сохранить данные, убедитесь, что они хранятся в нижнем регистре.
Также не разбивайте файл csv на ,
. Вместо этого используйте библиотеку Python CSV
для открытия файла csv, поскольку данные могут содержать ,
. Обязательно измените csv.QUOTE
так, чтобы он заключал все в "
.