2011-10-07 44 views
0

我是Python的新手,尝试使用大约30个csv文件,所有文件都具有相同的标题,但每个文件中的数据都不同,并合并为一个。 现在我假装我只有两个文件需要,其中一个带有ID号码1,2和3的信息,另一个带有4,5号码头的信息 到目前为止,我已经设法将这些文件带入并使用dictreader创建一串字典,但是我无法弄清楚如何获取与每个键相对应的值,并将它们放在一个大文件中,并将所有数据放在一起。我在使用dictreader之后加入两个csv文件

下面是我多远,到目前为止得到:)

for filename in os.listdir(os.getcwd()): 
    root, ext = os.path.splitext(filename) 
    if root.startswith('file1') and ext == '.csv': 
     upload1 = filename 
    if root.startswith('file2') and ext == '.csv': 
     upload2 = filename 

file_upload1 = open(upload1, 'rU') 
data_upload1 = csv.DictReader(file_upload1) 

for row in data_upload1: 
    print row 

与同为upload2。然后我得到这样的输出;

{'ID': '1', 'name': 'bert', 'age': '30'} 
{'ID': '2', 'name': 'ernie', 'age': '40'} 
{'ID': '3', 'name': 'pinky', 'age': '50'} 
{'ID': '4', 'name': 'perky', 'age': '60'} 
etc 

而我很想做是与标识1,2,3,4,5,6一列,然后为每个相应名称的列,一个CSV文件,每个对应的年龄等

有人可以请建议我怎么能做到这一点? 对不起菜鸟问题。

回答

0

当您调用csv.DictReader()时,您将得到一个字符串生成器。假设我们有2个文件:“f1.csv”和“f2.csv”,并且每个文件都包含多个记录。


    import csv 

    fp1, fp2 = open("f1.csv"), open("f2.csv") 
    ld1, ld2 = csv.DictReader(fp1), csv.DictReader(fp2) #ld1 and ld2 are *generators* 

    res = [] #our result will be stored here(LIST of dicts) 
    ds = [ld1, ld2] #list of generators 

然后,迭代DS的同时,加入从每个字典每KV对至RES字典,像这样:

for d in ds: #each d is a generator 
    for e in d: #each e is a dict 
     res.append(e) 

这水库现在是一个列表,它包含来自两个类型的字典源。只需对它进行迭代并写入即可。

请注意,您可以使代码更健壮/效率,但最初只是了解方法:)

问候,

亚提Sagade

+0

嗨!非常感谢你回复我的问题!我尝试了你的建议,但得到了以下错误。你知道我做错了什么吗?与如何使用dictreader创建对象有关?回溯(最近通话最后一个): 文件 “merge_bulk_v2.py”,30日线在 RES [关键] = d [关键] AttributeError的:DictReader实例没有属性 '__getitem__' 再次感谢您的帮助:) –

+0

我认为你会感到困惑:)请参阅DictReader()为您提供一个像对象的生成器,您可以迭代。我想我的回答太简单了。我会编辑答案。 –