Подсчет строк в файле 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')
Вернуться на верх