如何用python读取csv文件
我正在尝试读取csv文件,但它不起作用。 我可以阅读我的csv文件,但是当我看到我读的时候,那里有值之间的空白。如何用python读取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()
我更喜欢使用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>
编辑:这个答案是很老。虽然numpy.genfromtxt,现今大多数人会使用熊猫:
>>> import pandas as pd
>>> pd.read_csv(csvfile)
这具有pandas.DataFrame,这是对数据进行分析更好结构的优势。
genofromtxt - > genfromtxt – Tshepang 2010-04-26 21:55:47
固定,谢谢! – dalloliogm 2010-04-27 08:43:08
您是否需要在'genfromtxt()'中使用'names = True'来获取data ['firstcolumn']'工作? – 2013-03-05 04:37:08
你不会对你定义的方言做任何事情。您的意思是要做到这一点:
csv.register_dialect('windows_dialect', windows_dialect)
p = csv.reader(contenu, dialect='windows_dialect')
还不能确定reco
功能是什么。
如果你有对数据的控制,使用制表符分隔,而不是::
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
这将产生预期的结果。
获取更多有用反馈的提示:通过自包含且完整的示例代码演示您的问题,该代码不包含无关且不重要的工件。
+1'unix生成的CSV文件'(显示Excel不是* only *的方式) – pavium 2009-10-20 09:09:28
您的缩进不一致。 – SilentGhost 2009-10-20 09:12:10
“值之间的空白”是什么意思?该文件中有空白吗? 'csv'从文件中得到的值在它们周围有空格?顺便说一句,你的线路终端是错误的。它应该是'\ n'而不是'n'。 – 2009-10-20 10:32:53