![](/img/trans.png)
[英]How to write information from a list to a csv file using csv DictWriter?
[英]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.