簡體   English   中英

使用 DictWriter 從 CSV 文件中刪除行

[英]Deleting Rows from CSV file using DictWriter

在此處輸入圖像描述 這是我想要做的一個非常基本的示例我想使用 DictWriter 庫刪除一行(或一組行,使用列表),但我不知道行刪除的語法這就是我所擁有的至今

import csv

filename = "sampletable.csv"
with open(filename, 'r') as csvfile: 
    csvreader = csv.DictReader(csvfile)
    
    with open("samplerowdeletion.csv", "w") as newfile:
        fieldnames = ["high","low","precipitation"]
        csvwriter = csv.DictWriter(newfile, fieldnames=fieldnames)
        csvwriter.writeheader() 
        
        for row in csvreader:
            del(row[1])

從一個 csv 讀取並將一些行寫入另一個 csv 是過濾的一個示例。 最簡單的方法是跳過不需要的行:

for row in reader:
    if row['high'] == '10':
        # go back to the top of the loop
        continue
    writer.writerow(row)

您可以編寫一個 function ,而不是硬編碼檢查,如果應該保留一行,它將返回True ,否則返回False (這種 function 被稱為謂詞):

def is_ok(row):
    if row['high'] in list_of_bad_values:
        return False
    return True

for row in reader:
    if not is_ok(row):
        # go back to the top of the loop
        continue
    writer.writerow(row)

您可以使用 Python 的內置過濾器function 或列表推導來避免顯式for循環:

def is_ok(row):
    # Shorter version
    return not (row['high'] in list_of_bad_values)
 
# Using filter
good_rows = filter(is_ok, reader)
writer.writerows(list(good_rows))

# Using a list comprehension
good_rows = [row for row in reader if is_ok(row)]
writer.writerows(rows)

如果要按行號過濾,可以使用enumerate內置的 function。 enumerate將為每一行生成一個行號,從零開始 - 您可以通過傳遞一個start參數來調整它:

enumerate(some_iterable, start=1)
import csv

ROWS_TO_DELETE = [3, 4]

def is_not_ok(row_number):
    return row_number in ROWS_TO_DELETE
    

filename = "sampletable.csv"
with open(filename, 'r', newline=") as csvfile: 
    csvreader = csv.DictReader(csvfile)
    
    with open("samplerowdeletion.csv", "w", newline=") as newfile:
        fieldnames = ["high","low","precipitation"]
        csvwriter = csv.DictWriter(newfile, fieldnames=fieldnames)
        csvwriter.writeheader() 
        
        for row_number, row in enumerate(csvreader):
            if is_not_ok(row_number):
                continue
            writer.writerow(row)

或者,您可以創建一個行計數器變量並手動遞增它

filename = "sampletable.csv"
with open(filename, 'r', newline=") as csvfile: 
    csvreader = csv.DictReader(csvfile)
    
    with open("samplerowdeletion.csv", "w", newline=") as newfile:
        fieldnames = ["high","low","precipitation"]
        csvwriter = csv.DictWriter(newfile, fieldnames=fieldnames)
        csvwriter.writeheader() 
        
        row_number = 0
        for row in csvreader:
            if row_number in ROWS_TO_DELETE:
                continue
            writer.writerow(row)
            row_number += 1

暫無
暫無

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

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