1

我有的代码

i = 0
while i < len(newsymbolslist):
    time = 102030
    data = 895.233
    array = [time], [data]
    with open('StockPrice.csv', 'wb') as file:
        file_writer = csv.writer(file)
        file_writer.writerow(array)
        file.close()
    i += 1

我对 Python 还很陌生,所以我不能 100% 确定为什么前面的代码只将数据输入到第一行。我的猜测是,因为我正在打开文件并且每次迭代它都不知道它不应该覆盖。我知道如何在理论上解决它(如果这是问题的话)。我只是在语法上有问题。

我的猜测:使用迭代(var i)来计算文件应该写多少行。

4

2 回答 2

4
with open('StockPrice.csv', 'wb') as f:
    file_writer = csv.writer(f)
    for s in newsymbolslist:
        time = 102030
        data = 895.233
        array = [time], [data]
        file_writer.writerow(array)

您的第一个猜测是正确的:每次您在'wb'模式下打开文件时,该文件都会被有效删除(如果它存在)并创建一个新的空文件。因此,只有在最后一次迭代期间写入的内容才会while-loop影响文件的内容。

解决方案是打开文件一次(在循环开始之前)。

请注意,使用with 语句打开文件可以保证当 Python 离开with-block. 所以没有必要给f.close()自己打电话。

于 2013-05-25T01:08:33.863 回答
2

文档中

最常用的模式值是'r'用于读取、'w'写入(如果文件已存在则截断文件)和'a'附加 (...)

如果要写入现有文件的末尾,请以附加模式打开它,使用'a'. (虽然在这种情况下,是的,重组你的循环是更好的答案。)

于 2013-05-25T01:15:30.977 回答