python CSV智能解析器和列匹配

时间:2013-08-06 23:25:34

标签: python csv matching dynamic-columns

我有成千上万的CSV文件,其中大多数都有以下列

threadSubject
bccList
sender_name
recipient_names
sender  
dateReceived
date    
recipients
subject 

不幸的是,根据CSV文件,每个列(如果存在)可能位于不同的列数,因此使解析变得复杂。

我需要做的是从输入的CSV文件中仅提取这些选定的列并将它们全部放入单个输出文件中。

我是python的新手,我确信实现这一目标的方法非常简单,但我无法理解。 我不确定是否应该使用Pandas或其他机制。

在逻辑代码中,它应该或多或少地像这样工作。

for file in (all files in current folder); do
  open file;
  get header and find out at which positions are interesting columns 
  #or match by column name;

  dump interesting columns into output file in the right order;
  close file;
done

我的棘手部分是get header...

你们有没有人建议如何以智能pythonic方式做到这一点?

我考虑过bash并手动解析它,但认为在你的帮助下学习如何在python中完成它可能是一个好主意。

P.S。它的背景是我需要查看过去5年的所有电子邮件,并了解每天发送第一封电子邮件和最后一封电子邮件的时间。我使用Mork工具基于Thunderbird MSF文件创建了CSV。一旦我完成了CSV解析,我就需要找到简单的方法来获取第一封电子邮件和同一天的最后一封电子邮件。这是另一个故事。

提前感谢所有建议。

1 个答案:

答案 0 :(得分:0)

如果所有文件中的列名相同,请使用csv.DictReader完成此任务。

Python csv.DictReader Documentation

您可以直接引用字段名称而不是列号。

    import csv
    file = open('Path_to_file','rb')
    for record in csv.DictReader(file):
        print record['Column_Name']

希望这会有所帮助。