2012-06-25 4 views
1

У меня есть представление Django, которое читает CSV-файл и сохраняет его в модели.Python удаляет пробелы в конце CSV-файла

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 

РЕДАКТИРОВАТЬ

Traceback:

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.

Мой вопрос в том, как я могу удалить пробелы с конца (и, возможно, только для начала) файла.

Любая помощь очень ценится.

+0

вы могли бы опубликовать точные отслеживающие вы получаете? – dm03514

+0

Добавлен трассировка. –

ответ

1

, если я правильно понимаю, вы хотите, чтобы заботиться о некоторых пустых строк в конце файла, не так ли?

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

Спасибо @ dm03514 за указывая на ошибку в моем оригинальный ответ

+0

Это сработало для меня: 'if '' .join (line) == '': continue'. Есть ли проблемы с использованием этого решения? –

+0

@ DarwinTech Да, это сработает. Или вы можете использовать его в моем обновленном ответе, который является более кратким. Я думаю, – xvatar

+0

Это не обязательно, почему вы вызываете функцию, когда можете просто проверить, пуста ли строка или нет? 'if line:'? – dm03514

0

Вы попробовали line.strip()?

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

+1

, который дает мне объект «списка», не имеет атрибута «strip» –

+0

да, строка - это список, а не строка. если u r, используя весь список в качестве параметра u, можно создать функцию strip_list. –

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() 
+0

'line [0] .strip()' не решает его проблему, он будет поднимать ту же ошибку; – dm03514

2

line будет список. Вы не можете его разбить. Если это пустой список, это означает, что это пустая строка в файле. Просто проверьте, есть ли в ней элементы. Пустая строка не будет содержать элементов списка.

Вместо вскрышных линий вы можете просто проверить, что линия действует if line:

Смежные вопросы