这是我当前的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)
答案 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()