Python从CSV文件中抓取整列,忽略带双引号的逗号

时间:2015-12-07 08:39:16

标签: python csv

我是python的新手。 我想从* .csv文件中获取整个列。 为了做到这一点,我看到我最好的方法是将我的csv转换为2-dim。数组使用:

   > import numpy as np
   > csv=np.genfromtxt(file_name.csv, delimeter=",")

,例如,如果我想抓住第8列只是为了写:

  

column8 = CSV [:1,7]

我的问题是我有双引号的字段,其中有逗号,所以我有一个ValueError:

  

ValueError:检测到一些错误!

Line #6 (got 16 columns instead of 15)

Line #21 (got 16 columns instead of 15)

Line #45 (got 18 columns instead of 15)

etc.

所以我想要的是,如果这是我的csv:

  

A,B,C,d

     

F,G,H, “I,J”

     

K,L,M, “N,O,P”

所以,例如,如果我想抓住第4列,我希望答案是:

  

d

     

I,J

     

N,O,P

任何想法?

谢谢!!!

4 个答案:

答案 0 :(得分:1)

Python的内置csv模块可以很好地处理默认设置。所以这应该有效:

import csv
with open("file_name.csv", "r", newline='') as f:
    reader = csv.reader(f)
    column8 = [row[7] for row in reader]

first example中的module's documentation略有不同,其中包含其他有用信息。

答案 1 :(得分:0)

pandas非常适合从csv文件中读取。

尝试使用:

df = pandas.read_csv("filename.csv", delimeter=",") # header=None)

之后,访问列

df['colname'] # or df[col_ind] if you set header=None

答案 2 :(得分:0)

使用pandas包将解决您的问题。由于pandas有各种各样的方法,我们可以从中读取不同的文件格式。

    import pandas as pd
    df = pd.read_csv("filename.csv")
    print df[column4]

答案 3 :(得分:0)

与taleinat的解决方案类似,但如果你知道header_name并想要返回一个列表。

import csv

with open(FILENAME, "rb") as MEDIA:
headers = []
columns = []
required_header = "name"
csv_file = csv.reader(MEDIA, quoting=csv.QUOTE_NONE, delimiter=DELIMITER)
for row in csv_file:
    headers = row[:]
    break
position = headers.index(required_header)
[columns.append(row[position]) for row in csv_file]
return columns