将行附加到csv文件时出现问题

时间:2019-05-28 18:17:43

标签: python pandas csv

我正在尝试向现有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='')
它工作正常,但我需要添加一些行而不是重写它们...

1 个答案:

答案 0 :(得分:0)

来自文档:

对于Writer对象,行必须是字符串或数字的可迭代项,对于DictWriter对象,字典必须将字段名映射为字符串或数字(首先将它们通过str()传递)的字典。

这对我有用:

csv文件如下:

enter image description here

将高度为180的“ alex”添加到文件中

 with open('./example.csv', 'a', newline='') as csvfile:
        newPerson = csv.writer(csvfile, delimiter=',')
        newPerson.writerow(['alex', 180])

输出:

enter image description here

编辑:

我尝试推断您更新后的帖子中的数据结构,并且使用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]])