CSV文件,无法从csv文件中添加记录

时间:2013-10-25 08:19:22

标签: python csv

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

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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. Dictionary Comprehension
  4. Delmiter,它是分隔值的字符,在本例中为,
  5. Quotechar,它的字符,用于保存csv中的值,在本例中为"