1

CSVファイルを読み取ってモデルに保存するDjangoビューがあります。

views.py

def csv_upload(request):
    ...
    file = request.FILES['attach']
    reader = csv.reader(file, delimiter=';') 
    next(reader) # skip headers

    for line in reader:
        ... # process and save

編集

トレースバック:

File "/home/sam/django-projects/datazone/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
111.                         response = callback(request, *callback_args, **callback_kwargs)
File "/home/sam/django-projects/datazone/bin/datazone/climate/views.py" in climate_upload
258.                 report.year = line[1]

Exception Type: IndexError at /climate/upload/
Exception Value: list index out of range

編集終了

ファイルのバリエーションをテストしているときに、ファイルに末尾の空白がある場合(たとえば、Excelから保存したために空の行がある場合)、Index out of rangeエラーが発生することに気付きました。

私の質問は、ファイルの最後(そしておそらく最初は念のため)から空白を削除するにはどうすればよいかということです。

どんな助けでも大歓迎です。

4

4 に答える 4

2

lineリストになります。剥がすことはできません。空のリストの場合は、ファイル内の空の行であることを意味します。行に要素が含まれていることを確認してください。空の行にはリスト要素はありません。

行を削除する代わりに、行が有効であることを確認できますif line:

于 2012-06-25T19:04:37.383 に答える
1

私の理解が正しければ、ファイルの最後にある空白行を処理したいですよね?

for line in reader:
    if line:
        ... # process and save

私の元の答えの間違いを指摘してくれてありがとう@dm03514

于 2012-06-25T16:39:33.503 に答える
0

やってみましたline.strip()か?

http://docs.python.org/library/stdtypes.html

于 2012-06-25T16:30:07.303 に答える
0

行はリストであり、文字列ではありません。リスト全体をパラメーターとして渡す場合は、strip_list関数を作成できます。

def strip_list(my_list):
    for index, string in enumerate(my_list):
         try: my_list[index] = string.strip()
         # In case it's not a string
         except AttributeError: pass
    return my_list

for line in reader:
    line = strip_list(line)

または、使用時に各アイテムを削除することもできます。

line[0].strip()
于 2012-06-25T17:04:36.597 に答える