【问题标题】:Python CSV seek not working?Python CSV 搜索不起作用?
【发布时间】:2014-03-15 03:48:52
【问题描述】:
 file_handle = open("/var/www/transactions.csv", "a")
  c = csv.writer(file_handle);

 oldamount = amount / 1.98
  file_handle.seek(0);

  c.writerow( [addre, oldamount, "win"])

这是我的代码

我希望将 [addre, oldamount, "win"]) 写入 CSV 文件的开头,但它不起作用。还是会跌到谷底的。

【问题讨论】:

    标签: python csv seek


    【解决方案1】:

    您正在以追加 ("a") 模式打开文件。 open()documentation 明确指出了这种行为:“所有写入都附加到文件末尾,而不管当前的查找位置如何”。

    不可能像您想要的那样在文件的开头“插入”文本。您可以读取整个文件,将数据添加到前面,然后将其写回,或者您可以接受数据放在最后的事实。

    重写示例:

    with open("/var/www/transactions.csv", "r+") as f:
        olddata = f.read()
        f.seek(0)
        c = csv.writer(f);
        c.writerow([addre, oldamount, "win"])
        f.write(olddata)
    

    请注意,如果在写入时出现问题,这可能会损坏您的文件。如果您想尽量减少这种可能性,请写入一个新文件,然后os.rename() 覆盖旧文件。

    【讨论】:

    • NameError: 全局名称 'file_f' 未定义
    • 抱歉,复制粘贴错误。更新了我的答案。如果还需要重新计算oldamount,请在 with 块之前进行,以尽量减少 'with' 块下的代码量。
    • 太好了。我将如何只重写前 20 行(或在我重写之前删除最后一行)
    • 使用 CSV 阅读器读取数据,修改数据,写出新数据。如果可能有 2 个进程同时更新文件,请查看文件锁定机制。
    猜你喜欢
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2015-02-10
    • 2013-02-04
    • 2016-01-06
    • 2016-01-23
    • 2017-06-12
    相关资源
    最近更新 更多