如何在Django中逐行读取CSV文件?

0 投票
1 回答
796 浏览
提问于 2025-04-18 00:39

我想把CSV文件的第一行作为字段名在Django中使用。这样可以吗?我想逐行读取这个CSV文件。

这是我的代码。

if request.FILES:
    form = SalaryForm(request.POST, request.FILES)
    if form.is_valid():
        # request.session['salary'] = request.POST["salary"]
        # salary = Salary.object.get(id=request.session['salary'])
        print(request.FILES['fileUpload'].name)
        csvfile = request.FILES['fileUpload'].read()
        encoding = chardet.detect(csvfile)['encoding']
        print (encoding)
        if encoding is None:
            encoding = 'CP932'
        if encoding !='utf-8':
            csvfile = csvfile.decode(encoding, 'replace').encode('utf-8')
        reader = csv.reader(csvfile, delimiter=',')

但是现在读取器只能存储字母,不能存储单词。我的CSV文件是这样的:

'registration_number', 'name', 'kana', 'month', 'day', 'client_code', 'row', 'business_days', 'working_days', 'count', 'early_late_time', 'normal_time', 'over_time', 'holiday_time', 'night_time', 'working_time', 'basic_salary', 'regular_attendance', 'reqular_attendace_allowance', 'over_time_ratio', 'holiday_time_ratio', 'night_time_ratio', 'fare_day', 'fare', 'employment_insurance', 'personally', 'spouse', 'dependent', 'special_allowance', 'adjustment', 'income_tax', 'advanced_payment', 'suspense_payment', 'health_insurance', 'employment_pension', 'employment_insurance_amount', 'no_payment' "223","山野 薫","ヤマノ カオリ",1,10,"1101",1,17,16,,\1,,,,,\8,800,350,0,\1,\1,\0,,8300,1,0,9,0,9200,,2260,,,9557,15928,818,0 "018","波多野 未樹","ハタノ ミキ",1,15,"2301",1,21,20,,,,,,,\8,800,200,0,\1,\1,\0,300,6000,0,,,,,,3360,,,,,,0

我想用第一行作为我的字段名,因为每次上传的文件格式都不一样。

非常感谢!

1 个回答

1

使用 csv.DictReader,而不是 csv.reader。如果你不提供 fieldnames 这个参数,文件的第一行会被用来确定字段名称。

撰写回答