Adding a column to dictReader without modifying the CSV file
我有一个csv文件,有3列。比如:
这是我的职责:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | def addFilename(self): with open(self.datafile,"r") as f: reader = csv.DictReader(f, delimiter='|') for a, b, c in reader: #Get filename filename = self.getFilename() yield { "_source": { "a": a, "b": b, "c": c, "filename": filename } } |
现在,我想概括许多不同的csv文件的这种行为。这些文件具有不同的列数和列名称。有办法吗?
我不想修改csv文件。我只知道我可以用
这个问题可能提供一些有用的见解:
- "dict(d1,**d2)"一词中的"**"是什么意思?
基本上你可以这样做:
1 2 3 4 5 | def foo(fname): with open(fname,"r") as f: reader = csv.DictReader(f, delimiter='|') for row in reader: yield {"_source": dict(filename=fname, **row) } |
您不必对列名的级别进行迭代。您可以将
1 2 3 4 5 6 7 8 9 10 11 | def addFilename2(self): with open(self.datafile,"r") as f: reader = csv.DictReader(f, delimiter='|') for column_dict in reader: #Get filename filename = self.getFilename() mapped_values =list(column_dict.items()) mapped_values.append(("filename", filename,)) yield { "_source": dict(mapped_values) } |
这种方法忽略了csv文件中的名称和列数,并且总是将
字典可以从一个2元组列表中创建,我们使用