python27只从csv文件中提取特定列

时间:2016-07-20 05:52:34

标签: python json csv

请原谅我是一个相当新的编程尝试做一些简单的事情,但似乎无法弄明白。可能是显而易见的事情。

我需要使用一个填充了大约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()

2 个答案:

答案 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'}