Image

Imageuznick wrote in Imageru_python

В питон начиная с версии 2.3 входит библиотека CSV, с помощью которой можно читать/писать файлы в формате CSV.

Есть два csv-файла, полученных из одного .xsl, первый под Windows, второй под Mac OS X. У windows-файла в качестве разделителей используется ";", у mac-файлов — ","

Код
>>> import csv
>>> input_file = open('game_windows.csv', 'rb')
>>> reader = csv.DictReader(input_file, dialect = 'excel', fieldnames = ['title', 'developer', 'platform', 'year', 'price'])
>>> for rec in reader:
...     try:
...             rec['number'] = int(rec['number']) + 1
...     except:
...             pass
...     print rec
... 
Выдаёт
{'platform': None, 'price': None, 'developer': None, 'year': None, 'title': 'title;developer;platform;year;price'}
{'platform': None, 'price': None, 'developer': None, 'year': None, 'title': '\xc0\xeb\xe8\xf1\xe0;Electronic Arts;PC;06.12.2000;299'}
{'platform': ' Xbox;23.09.2005;499', 'price': None, 'developer': ' Xbox);;PS2', 'year': None, 'title': 'Burnout Revenge (PS2'}
{'platform': None, 'price': None, 'developer': None, 'year': None, 'title': 'Burnout Revenge (Xbox360);;Xbox 360;17.03.2006;699'}


Если же работать с тем файлом, который сделан в Mac OS X, то он парсится правильно.
На сколько я понимаю, csv.DictReader с диалектом excel приучен работать с тем форматом, который через запятую.

По идее, если унаследовать от Dialect класс и указать там параметры, можно настроить csv.DicrReader для работы с нужным разделителем.

А вот как сделать универсальный скрипт, который работал бы с обоими форматами?