Я пытаюсь прочитать файл csv, но он не работает.
Я могу прочитать мой файл csv, но когда я вижу, что я читаю, там где пробел между значениями.
Вот мой код
# -*- coding: iso-8859-1 -*-
import sql_db, tmpl_macros, os
import security, form, common
import csv
class windows_dialect(csv.Dialect):
"""Describe the usual properties of unix-generated CSV files."""
delimiter = ','
quotechar = '"'
doublequote = 1
skipinitialspace = 0
lineterminator = 'n'
quoting = csv.QUOTE_MINIMAL
def reco(d):
cars = {210:'"', 211:'"', 213:"'", 136:'à', 143:'è', 142:'é'}
for c in cars:
d = d.replace(chr(c),cars[c])
return d
def page_process(ctx):
if ctx.req_equals('catalog_send'):
if 'catalog_file' in ctx.locals.__dict__:
contenu = ctx.locals.catalog_file[0].file.read()
#contenu.encode('')
p = csv.reader(contenu, delimiter=',')
inserted = 0
modified = 0
(cr,db) = sql_db.cursor_get()
for line in p:
if line:
logfile = open('/tmp/test.log', 'a')
logfile.write(line[0])
logfile.write('\n')
logfile.write('-----------------------------\n')
logfile.close()
Ответ 1
Я предпочитаю использовать numpy genfromtxt, а не стандартную библиотеку csv, потому что он генерирует numpy recarray, которые представляют собой чистые структуры данных для хранения данных в подобном таблице объекте.
>>> from numpy import genfromtxt
>>> data = genfromtxt(csvfile, delimiter=',', dtype=None)
# data is a table-like structure (a numpy recarray) in which you can access columns and rows easily
>>> data['firstcolumn']
<content of the first column>
EDIT: Этот ответ довольно старый. В то время как numpy.genfromtxt, в настоящее время большинство людей будут использовать pandas:
>>> import pandas as pd
>>> pd.read_csv(csvfile)
Это имеет преимущество при создании pandas.DataFrame, который является лучшей структурой для анализа данных.
Ответ 2
Если у вас есть контроль над данными, используйте вместо них разделитель табуляции:
import csv
import string
writer = open('junk.txt', 'wb')
for x in range(10):
writer.write('\t'.join(string.letters[:5]))
writer.write('\r\n')
writer.close()
reader = csv.reader(open('junk.txt', 'r'), dialect='excel-tab')
for line in reader:
print line
Это приводит к ожидаемым результатам.
Совет для получения более полезной обратной связи: продемонстрируйте свою проблему с помощью самодостаточного и полного кода примера, который не содержит посторонних и несущественных артефактов.
Ответ 3
Вы ничего не делаете с диалектом, который вы определили. Вы хотели сделать это:
csv.register_dialect('windows_dialect', windows_dialect)
p = csv.reader(contenu, dialect='windows_dialect')
Также не уверен, для чего предназначена функция reco
.