CSV-модуль Python ведет себя по-разному в представлении Django - PullRequest
1 голос
/ 20 августа 2011

У меня есть файл csv с этим содержимым теста:

1,2,3
4,5,6
7,8,9

Синтаксический анализ этого в обычном порядке с модулем csv работает нормально:

>>> for row in csv.reader(open('test.csv')):
...     print row
... 
['1', '2', '3']
['4', '5', '6']
['7', '8', '9']

Затем я пытаюсь использоватьтот же процесс в представлении django:

def upload_csv(request):
    if request.method == 'POST':
        form = ProductCSVUploadForm(request.POST, request.FILES)
        if form.is_valid():
            for row in csv.reader(request.FILES['csv_file'].read()):
                print row
    else:
        form = ProductCSVUploadForm()
    return render_to_response('upload_csv.html', locals())

Это дает вывод:

['1']
['', '']
['2']
['', '']
['3']
[]
['4']
['', '']
['5']
['', '']
['6']
[]
['7']
['', '']
['8']
['', '']
['9']
[]

Изменяет ли Django данные?Как я могу предотвратить это?

Ответы [ 2 ]

3 голосов
/ 20 августа 2011

Мэтт добавил в начало вопроса:

Сразу после публикации мне пришел ответ: удаление .read (). Вы можете удалить модераторов, если хотите.

Причина проблемы в том, что read возвращает строку, которая дает символы при повторении, в то время как open создает объект файла, который выдает строки при повторении.

0 голосов
/ 20 августа 2011

Я думаю, что вы делаете ошибку, читая файл, а не просто предоставляя его читателю.

 for row in csv.reader(request.FILES['csv_file'].read()):

должно быть:

 for row in csv.reader(request.FILES['csv_file']):
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...