我正在尝试向现有CSV文件添加一行。由于某种原因,它不会为空白CSV添加任何行...
奇怪的是,如果我使用w
在CSV上运行,则代码可以完美运行,但是如果我尝试使用a
附加到现有的CSV,则该过程不会出现错误,但会得到空白的CSV 。
甚至更奇怪的是,如果我用w
运行,然后再用a
运行,那么这两种方法都可以工作...
我尝试过:
csvfile = open(r'file path', 'a', newline='')
obj = csv.writer(csvfile)
现在,在某些情况下,我得到了一个for循环,对于这种情况而言,这并不重要。
for stock_symbol in mystocks:
obj.writerow([ddate,bmo_amc,stock_symbol,company_name])
print(ddate,bmo_amc,stock_symbol,company_name)
2019-05-23 00:00:00 Before The Open WMS Advanced Drainage Systems 2019-05-23 00:00:00 Before The Open BBY Best Buy 2019-05-23 00:00:00 Before The Open BJ BJ's Wholesale 2019-05-23 00:00:00 Before The Open BRC Brady 2019-05-23 00:00:00 Before The Open HRL Hormel Foods
obj.writerow([ddate,bmo_amc,stock_symbol,company_name])
csvfile.close()
现在当我这样重写CSV文件时
csvfile = open(r'file path', 'w', newline='')
它工作正常,但我需要添加一些行而不是重写它们...
答案 0 :(得分:0)
来自文档:
对于Writer对象,行必须是字符串或数字的可迭代项,对于DictWriter对象,字典必须将字段名映射为字符串或数字(首先将它们通过str()传递)的字典。
这对我有用:
csv文件如下:
将高度为180的“ alex”添加到文件中
with open('./example.csv', 'a', newline='') as csvfile:
newPerson = csv.writer(csvfile, delimiter=',')
newPerson.writerow(['alex', 180])
输出:
编辑:
我尝试推断您更新后的帖子中的数据结构,并且使用open()
中的'a'毫无问题地生成了一个csv文件。使用with open() as
时,无需将csvfile.close()
放在此处,它将自动为您关闭。还有ddate,bmo_amc和company_name迭代器吗?
import csv
mystocks = ['WMS', 'BBY', 'BJ', 'BRC', 'HRL']
ddate = ['2019-05-23 00:00:00']*len(mystocks)
bmo_amc = ['Before']*len(mystocks)
company_name = ['Advanced Drainage Systems', 'Besty Buy', 'BJ\'s whole food', 'Brady', 'Hormel Foods']
with open(r'./stocks.csv', 'a', newline='') as csvfile:
obj = csv.writer(csvfile, delimiter=',')
for index, stock_symbol in enumerate(mystocks):
obj.writerow([ddate[index], bmo_amc[index], stock_symbol, company_name[index]])