【问题标题】:Python delete CSV row without creating a new filePython删除CSV行而不创建新文件
【发布时间】:2016-04-15 18:50:21
【问题描述】:

我正在使用 Python (Raspberry Pi) 编辑 CSV 文件。我用“追加”标签打开文件并添加一行。之后我检查文件的大小。如果文件太大,我想删除第一行数据(有一个标题行)。我看到的每个示例都只是跳过该行并将所有其他行写入不同的 CSV 文件。我不想创建新的 CSV 文件...我只想删除当前文件中的第一行并保存。

import csv

def write_csv(datalist):   

    with open("CSVfile",'a') as f:
        writer = csv.writer(f, delimiter=',' ,quoting=csv.QUOTE_NONE)
        writer.writerow(datalist)

    while os.path.getsize("CSVfile") > 100000:
        ****DELETE FIRST ROW OF DATA FROM CSV FILE****

【问题讨论】:

  • 您将不得不反复保存它。每次删除第一行datalist,直到大小小于100000。
  • 这段代码有错误,csv.writer对象没有writeline
  • 将其修复为writerow。谢谢。
  • @ThomasChristensen 我将如何对其进行编码,以便我每次都写入一个新文件......但文件名保持“不变”,以便循环在需要循环时正常工作几次?
  • 您需要使用第二个文件。您可以创建一个新文件并写入它。写入成功完成后,您可以将临时文件重命名为原始名称。

标签: python csv


【解决方案1】:

只是一种获取灵感的方式。在这种情况下无需创建新文件并重命名:

import csv
import os
import random

def ensure_csv_max_size(size):
    # Read all data into memory.
    with open('CSVfile', 'r') as f:
        reader = csv.reader(f, delimiter=',', quoting=csv.QUOTE_NONE)
        csv_data = list(reader)

    # Remove first row, save, check repeatedly.
    for i in range(len(csv_data)):
        with open('CSVfile', 'w') as f:
            writer = csv.writer(f, delimiter=',', quoting=csv.QUOTE_NONE)
            writer.writerows(csv_data[i:])

        print(os.path.getsize('CSVfile'))
        if os.path.getsize('CSVfile') <= size:
            break

def write_csv(datalist):   

    with open("CSVfile",'a') as f:
        writer = csv.writer(f, delimiter=',' ,quoting=csv.QUOTE_NONE)
        writer.writerow(datalist)

    while os.path.getsize("CSVfile") > 100000:
        print("cut")
        ensure_csv_max_size(100000)

for i in range(1000):
    write_csv([random.randint(0, 100) for _ in range(10)])

【讨论】:

  • 如果系统崩溃你已经丢失了文件;此外,这会立即损坏 SD 卡。
  • @AnttiHaapala 都是真的。
  • @totoro 谢谢你的例子。我最终按照每个人的建议编写了一个新文件,然后将其重命名为原始文件。似乎不值得冒破坏事物的风险。
  • @Crewski 好主意。我的回答只是提供一个通用的例子。我没有想到 Raspberry Pi。
猜你喜欢
  • 1970-01-01
  • 2018-03-24
  • 2023-03-08
  • 2020-06-19
  • 2018-08-15
  • 2018-09-18
  • 2016-12-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多