Подсчет строк в файле csv в базе данных Django
Я хочу ограничить количество строк перед импортом в db, как я могу подсчитать строки файла csv в следующей функции
def user_upload(request):
template = "user_upload.html"
if request.method == "GET":
return render(request, template)
try:
csv_file = request.FILES['file']
except MultiValueDictKeyError:
csv_file = None
if csv_file:
if not csv_file.name.endswith('.csv'):
messages.error(request, 'THIS IS NOT A CSV FILE')
if csv_file:
data_set = csv_file.read().decode('UTF-8')
io_string = io.StringIO(data_set)
next(io_string)
for column in csv.reader(io_string, delimiter=',', quotechar="|"):
if len(column) > 10:
try:
users = User(
username=column[0],
first_name=column[1],
last_name=column[2],
email=column[3],
add_1=column[4],
add_2=column[5],
suburb=column[6],
city=column[7],
state=column[8],
postcode=column[9],
country=column[10],
)
users.set_password('password')
users.save()
except (IntegrityError, ValueError) as e:
return render_to_response('message.html')
context = {}
return render(request, template, context)
else:
messages.error(request, 'Please select a valid file!')
return redirect('home')
Счетчик data_set, row count не дает правильных цифр, прошу помощи, спасибо
вы можете использовать enumerate
для получения текущего индекса строки, следовательно, текущего количества строк.
def user_upload(request, max_row_count):
template = "user_upload.html"
if request.method == "GET":
return render(request, template)
try:
csv_file = request.FILES['file']
except MultiValueDictKeyError:
csv_file = None
if csv_file:
if not csv_file.name.endswith('.csv'):
messages.error(request, 'THIS IS NOT A CSV FILE')
if csv_file:
data_set = csv_file.read().decode('UTF-8')
io_string = io.StringIO(data_set)
next(io_string)
for row_count, column in enumerate(csv.reader(io_string, delimiter=',', quotechar="|")):
if row_count >= max_row_count:
break;
if len(column) > 10:
try:
users = User(
username=column[0],
first_name=column[1],
last_name=column[2],
email=column[3],
add_1=column[4],
add_2=column[5],
suburb=column[6],
city=column[7],
state=column[8],
postcode=column[9],
country=column[10],
)
users.set_password('password')
users.save()
except (IntegrityError, ValueError) as e:
return render_to_response('message.html')
context = {}
return render(request, template, context)
else:
messages.error(request, 'Please select a valid file!')
return redirect('home')