从CSV-Python中提取命名列

时间:2012-11-16 04:58:49

标签: python csv

我有一个包含大约50列的csv文件,但我只需要大约10列。我希望能够从csv文件中提取我需要的列到新的csv文件。

这篇文章Deleting columns in a CSV with python中的最佳答案看起来就像我需要的那样。

但这是我每天需要做的事情,生成大型CSV文件的系统可以按不同的顺序导出列。所以我需要能够通过名称而不是数字来指定我需要的列。

以下表示CSV文件:

File1.csv

name, description, cost, image, date
ABC, "super, mega", 12.87, ./imagefile, "12/11/2012 08:12"

File2.csv

name, cost, date, description, image
SYZ, 43.98, "16/11/2012 09:16", "Some text, and such", ./image2.jpeg

我只想保留名称,说明和图片字段,但如果我使用代码(从@S.Lott上面的帖子派生):

import csv
with open("source","rb") as source:
rdr= csv.reader( source )
with open("result","wb") as result:
    wtr= csv.writer( result )
    for r in rdr:
        wtr.writerow( (r[0], r[1], r[3]) )

它只适用于第一个文件而不适用于第二个文件。

提前感谢您提出的任何建议!

2 个答案:

答案 0 :(得分:1)

使用DictReader类读取它,然后您可以按名称而不是索引写出字段。

答案 1 :(得分:1)

使用pandas的优势在于,它不仅可以轻松打开和保存不同格式的文件,还可以修改列和行,还因为您还可以修改,计算和播放数据如果你需要它。

获取具有所选列的csv文件是直截了当的:

import pandas as p

df = p.read_csv('File2.csv')  # reads your csv file as a table (dataframe object)

df2 = df[['cost', 'date']]    # selects two of the columns in your file

df2.to_csv('my_out.csv')      # saves again in csv format