2011-11-03 241 views
1

我想解决这个问题。 我读从以下几列CSV fiile数据:从csv文件读取Python

id, name, price 

所以我用下面的代码读取CSV:

import sys 
import csv as input 

def readFile(path): 
    try: 
     finput = input.reader(open(path,'rb'),delimiter=',',quotechar='|') 
    except IOError as (errno,strerror): 
      print "I/O error({0}): {1}".format(errno,strerror) 
    except: 
      print "Unexpected Error: ",sys.exc_info()[0] 
      raise 
    # covert format into list 
    fmod = list(finput) 
    return fmod 

但问题是name字段可以像

名,item_det 现在“”为我创建一个麻烦.. ,而不是读的名称字段作为一个单一的实体有在描述一个逗号.. 它是分裂特定领域。 我该如何解决这个问题。 感谢

+2

一次读取一行文件(无分隔符),并查看具有更高级功能的Python正则表达式函数之一,将字符串分割为字段 –

+3

通常情况下,您的CSV文件会在其中包含引号,这样一行应该是'| name,item_det |,other_field,another_field'(因为你设置了'quotechar ='|'')。 CSV模块可以处理这个问题。如果没有,您可能会想要像@MartinBeckett所说的那样手动解析它,或者检查列表的长度并在必要时手动合并这两个字段。 – Dougal

+0

你有没有对csv输入文件创建的控制,或者你被迫处理破碎的csv文件?通常人们使用'quotechar ='“'' –

回答

1

CSV就是这样的:“逗号分隔”。您可能需要引用名称字段:

|name,item_det| 

或者使用转义字符,但你必须通过设置引用到QUOTE_NONE打开它:

reader = csv.reader(open(path, "rb"), delimiter=',', quoting=csv.QUOTE_NONE, escapechar="\\") 

例子:

name\,item_det 

否则,请勿使用csv模块。

1

只要确保包含您的分隔符字符(,)任何单个值括在quotechar|,在你的例子)。因此,任何时候连续的name字段的形式为<name>, <item_det>,该行应该读取类似... ,|<name>, <item_det>|, ...的内容。