在python中将列表保存为csv

时间:2016-04-09 19:05:46

标签: python list csv

这是我当前的CSV文件:

BookId,BookTitle,Author ,Price(£),Subject,NoofCopies
1,Sherlock Holmes, Arthur Conan Doyle, 10.00, Crime, 3
2,The Computing Book, Robert, 2.00, Computing, 9
3,Another Book,Steeve, 4.50, Action, 1

如果我使用此代码读取csv文件:

def readbookcsv():
    database = []
    filename = "csvbooks.csv"
    with open(filename, 'r') as csvfile:
            reader = csv.reader(csvfile)
            for row in reader:
                    database.append(row)
    return database

我得到一个列表,其中列出了我在其余代码中使用的其他列表,以便在这些列表中添加或更改数据:

"['BookId', 'BookTitle', 'Author ', 'Price(£)', 'Subject', 'NoofCopies']","['1', 'Sherlock Holmes', ' Arthur Conan Doyle', ' 10.00', ' Crime', ' 3']","['2', 'The Computing Book', ' Robert', ' 2.00', ' Computing', ' 9']","['3', 'Another Book', 'Steeve', ' 4.50', ' Action', ' 1']"

然而,当试图覆盖保存文件时,我总是最终完全清除文件,将上面的列表附加到单个单元格或仅用列表覆盖csv,有没有办法将此列表更改回相同的格式csv文件在,然后保存?

保存:

 with open('csvbooks.csv', 'wt') as f:
    wtr = csv.writer(f)
    wtr.writerow(booklist)

with open('csvbooks.csv', 'at') as f:
    writer = csv.writer(f, lineterminator = '\n')
    writer.writerow(booklist)

2 个答案:

答案 0 :(得分:0)

您无法将整个列表提供给writerow()方法。 使用writerows()方法编写整个列表 马上:

with open('csvbooks_out.csv', 'wt') as f:
    wtr = csv.writer(f)
    wtr.writerows(booklist)

或者,您可以逐行编写:

with open('csvbooks_out.csv', 'wt') as f:
    wtr = csv.writer(f)
    for row in booklist:
        wtr.writerow(row)

现在csvbooks_out.csv的格式与输入文件的格式相同。

答案 1 :(得分:0)

要将列表列表(实际行)转换为csv-Format,您可以使用类似这些函数的内容:

def listToRow(list, separator = ','):
row = ''
for item in list:
    row += item + separator
row = row[:len(row)-1]
return row  

def listToString(list):
    str = ''
    for item in list:
        str += listToRow(item) + '\n'
    return str

方法listToRow将“row-list”作为参数,连接列表项并在它们之间添加分隔符(第二个参数)。默认情况下,我只是使用','就像你的例子。

方法listToString将列表列表作为参数,连接它们并添加换行符('\ n'),因此每行都有一个额外的行。

最后,您可以使用以下函数将字符串附加到实际的csv文件。

def appendStringToCSV(csvName = 'csv.csv', string = ''):
    f = open(csvName, 'a')
    f.write(string)
    f.close()