【问题标题】:How to read a csv file with python如何使用 python 读取 csv 文件
【发布时间】:2010-12-08 06:38:50
【问题描述】:

我正在尝试读取 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 表示“unix 生成的 CSV 文件”(表明 Excel 不是唯一方式)
  • 你的缩进不一致。
  • “值之间的空白”是什么意思?该文件中有空格吗? csv 从文件中获得的值周围有空格?顺便说一句,您的行终止符是错误的。应该是\n 而不是n

标签: python csv


【解决方案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>

编辑:这个答案很老了。虽然 numpy.genfromtxt,但现在大多数人会使用 pandas:

>>> import pandas as pd
>>> pd.read_csv(csvfile)

这样的好处是创建了pandas.DataFrame,是更好的数据分析结构。

【讨论】:

  • 您不需要在genfromtxt() 中使用names=True 来让data['firstcolumn'] 工作吗?
【解决方案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 函数的用途。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-12
      • 2013-04-23
      • 1970-01-01
      • 2010-10-28
      • 2016-04-06
      • 1970-01-01
      相关资源
      最近更新 更多