0

如何将csv文件中的记录添加到函数中的字典中,其中输入属性将是该文件的路径csv

请帮助解决这个未完成的功能:

def csv_file (p):
    dictionary={}
    file=csv.reader(p)
    for rows in file:
        dictionary......(rows)
    return dictionary
4

2 回答 2

2

好像您甚至还没有打开文件,您需要使用open它。

试试下面的代码:

import csv
from pprint import pprint

INFO_LIST = []
with open('sample.csv') as f:
    reader = csv.reader(f, delimiter=',', quotechar='"')
    for i, row in enumerate(reader):
        if i == 0:
            TITLE_LIST = [var for var in row]
            continue
        INFO_LIST.append({title: info for title, info in zip(TITLE_LIST, row)})

pprint(INFO_LIST)

我以以下csv文件为例:

"REVIEW_DATE","AUTHOR","ISBN","DISCOUNTED_PRICE"
"1985/01/21","Douglas Adams",0345391802,5.95
"1990/01/12","Douglas Hofstadter",0465026567,9.95
"1998/07/15","Timothy ""The Parser"" Campbell",0968411304,18.99
"1999/12/03","Richard Friedman",0060630353,5.95
"2001/09/19","Karen Armstrong",0345384563,9.95
"2002/06/23","David Jones",0198504691,9.95
"2002/06/23","Julian Jaynes",0618057072,12.50
"2003/09/30","Scott Adams",0740721909,4.95
"2004/10/04","Benjamin Radcliff",0804818088,4.95
"2004/10/04","Randel Helms",0879755725,4.50

您可以将所有这些逻辑放入一个函数中,如下所示:

def csv_file(file_path):

    # Checking if a filepath is a string, if not then we return None
    if not isinstance(file_path, str):
        return None

    # Creating a the list in which we will hold our dictionary's files
    _info_list = []
    with open(file_path) as f:
        # Setting the delimiter and quotechar
        reader = csv.reader(f, delimiter=',', quotechar='"')
        # We user enumerate here, because we know the first row contains data about the information
        for i, row in enumerate(reader):
            # The first row contains the headings
            if i == 0:
                # Creating a list from first row
                title_list = [var for var in row]
                continue
            # Zipping title_list and info_list together, so that a dictionary comprehension is possible
            _info_list.append({title: info for title, info in zip(title_list, row)})
    return _info_list

附录

  1. open()
  2. zip
  3. 字典理解
  4. Delmiter,在这种情况下,它是分隔值的字符,
  5. Quotechar,它的字符,在 csv 中保存值,在这种情况下"
于 2013-10-25T08:52:08.620 回答
2

您需要先打开文件:

def csv_file(p):
    dictionary = {}
    with open(p, "rb") as infile:   # Assuming Python 2
        file = csv.reader(infile)   # Possibly DictReader might be more suitable,
        for row in file:            # but that...
            dictionary......(row)   # depends on what you want to do.
    return dictionary
于 2013-10-25T08:40:48.300 回答