请原谅我是一个相当新的编程尝试做一些简单的事情,但似乎无法弄明白。可能是显而易见的事情。
我需要使用一个填充了大约6列的巨大csv文件,解析它并仅将2列提取到字典中,稍后我将使用json有效负载来构建和调用API。任何额外的数据都会导致调用失败。
我需要从仅填充选定列的csv文件创建一个字典,比如说column1和column5保留键值结构。到目前为止,我只能输出键或仅输出值或所有键和值,而不能输出特定的键值数据集。
我需要使用标准 python27 csv模块来实现这一点,没有什么额外的例如熊猫,因为我必须使用我拥有的东西。我知道我错过了一些明显但却无法弄明白的东西。非常感谢帮助。
源文件示例:
column1,column2,column3,column4,column5
joe,43,888-123-4567,seattle,toyota
bill,18,888-123-4567,vancouver,gm
sally,32,888-987-1234,la,ford
希望输出到词典:
[{'column1':'joe', 'column5':'toyota'},{'column1':'bil', 'column5':'gm'},{'column1':'sally', 'column5':'ford'}]
代码段
import csv
def parseSourceFile(filename):
filtered_data = {}
reader = csv.DictReader(open(filename, "rb"))
# some for loop here extracting only column1 and column5 with their values appending to filtered_data
return result
def main():
readerObj = parseSourceFile('somefile.csv')
for row in readerObj:
print row #at this point i only want columns1,5 k,v data
if __name__ == '__main__':
main()
答案 0 :(得分:0)
您可以将所需的密钥存储到列表中,然后从csv文件中读取的每一行都使用dict comprehension来选择所需的密钥:
import csv
import pprint
KEYS = [
'column1',
'column5'
]
def parseSourceFile(filename):
with open(filename) as f:
reader = csv.DictReader(f)
return [{key: row[key] for key in KEYS} for row in reader]
pprint.pprint(parseSourceFile('somefile.csv'))
输出:
[{'column1': 'joe', 'column5': 'toyota'},
{'column1': 'bill', 'column5': 'gm'},
{'column1': 'sally', 'column5': 'ford'}]
答案 1 :(得分:0)
像
这样的东西import csv
def parseSourceFile(filename):
reader = csv.DictReader(open(filename, "r"))
result = []
for row in reader:
result.append({k:v for (k,v) in row.items() if k in ['column1', 'column5']})
return result
def main():
result = parseSourceFile('so.csv')
# Print what you wrote you expected
print(result)
# Or iterate over the list elements and print each on separate lines
for row in result:
print(row)
if __name__ == '__main__':
main()
输出:
[{'column1': 'joe', 'column5': 'toyota'}, {'column1': 'bill', 'column5': 'gm'}, {'column1': 'sally', 'column5': 'ford'}] {'column1': 'joe', 'column5': 'toyota'} {'column1': 'bill', 'column5': 'gm'} {'column1': 'sally', 'column5': 'ford'}