簡體   English   中英

csv 跳過追加數據跳過行

[英]csv skipping appending data skips rows

我有 python 代碼用於將數據附加到同一個 csv,但是當我 append 數據時,它會跳過行,並從第 15 行開始,而不是從第 4 行開始

import csv

with open('csvtask.csv', 'r') as csv_file:
    csv_reader = csv.DictReader(csv_file)

    ls = []
    for line in csv_reader:
        if len(line['Values'])!= 0:
            ls.append(int(line['Values']))

new_ls = ['','','']
for i in range(len(ls)-1):
    new_ls.append(ls[i+1]-ls[i])

print(new_ls)

with open('csvtask.csv','a',newline='') as new_file:
    csv_writer = csv.writer(new_file)
    for i in new_ls:
        csv_writer.writerow(('','','','',i))
    new_file.close()

這是圖像在此處輸入圖像描述

在閱讀文件的同時更新文件並不可行,因此創建一個新文件是一種常見的解決方法。 以下是在保留原始文件中的字段名的同時執行此操作的。 新列將命名為Diff

由於沒有用於計算第一行差異的先前值,因此使用內置enumerate() function 處理文件的行,該值在每次調用時提供一個值,該值提供序列中項目的索引以及作為 object 迭代的項目本身。 您可以使用索引來了解當前行是否是第一行並以特殊方式處理。

import csv

# Read csv file and calculate values of new column.
with open('csvtask.csv', 'r', newline='') as file:
    reader = csv.DictReader(file)
    fieldnames = reader.fieldnames  # Save for later.
    diffs = []
    prev_value = 0
    for i, row in enumerate(reader):
        row['Values'] = int(row['Values']) if row['Values'] else 0
        diff = row['Values'] - prev_value if i > 0 else ''
        prev_value = row['Values']
        diffs.append(diff)

# Read file again and write an updated file with the column added to it.
fieldnames.append('Diff')  # Name of new field.
with open('csvtask.csv', 'r', newline='') as inp:
    reader = csv.DictReader(inp)
    with open('csvtask_updated.csv', 'w', newline='') as outp:
        writer = csv.DictWriter(outp, fieldnames)
        writer.writeheader()
        for i, row in enumerate(reader):
            row.update({'Diff': diffs[i]})  # Add new column.
            writer.writerow(row)

print('Done')

您可以像這樣使用 DictWriter function:-

header = ["data", "values"]
writer = csv.DictWriter(file, fieldnames = header)
data = [[1, 2], [4, 6]]
writer.writerows(data)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM