我這里有一個包含三行三列的 csv 檔案。
這是.csv檔案
起初我想列印所有的行。隨后,對于它們中的每一個,程式檢查它是否被寫入第二個欄位(索引 1)美國。如果是這樣,程式將從第三個欄位中獲取價格并將其乘以 2。
現在我需要重寫這個翻倍的價格而不是 2000(與美國一致)
import csv
with open('countries.csv', 'r') as source:
reader = csv.reader(source)
writer = csv.writer(source)
for line in reader:
print(*line, sep=';')
with open('countries.csv', 'r') as source:
reader = csv.reader(source)
for line in reader:
if line[2] == "USA":
actual_price = int(line[2])
print(actual_price)
new_price = int(actual_price) * 2
print(new_price)
有人已經建議我使用創建一個新檔案。但是當我想首先處理檔案中的資料時,這會導致問題。
import csv
import os
with open('countries.csv', mode='r') as oldfile, open(
'countries.tmp', mode='w', newline='') as newfile:
# define a reader and a writer
reader = csv.reader(oldfile, delimiter=';', quotechar='"')
writer = csv.writer(newfile, delimiter=';', quotechar='"',
quoting=csv.QUOTE_MINIMAL)
for line in reader:
print(*line, sep=';')
# copy everything changing the third field
for line in reader:
if line[2] == "USA":
actual_price = int(line[2])
print(actual_price)
new_price = int(actual_price) * 2
print(new_price)
for row in reader:
writer.writerow([row[0], row[1], ,new_price])
# ok, time to rename the file
os.replace('countries.tmp', 'countries.csv')
謝謝你的答案
uj5u.com熱心網友回復:
您new_price在回圈的每次迭代中都在發生變化for。因此,您應該在更改值的回圈中寫入行:
with open('countries.csv', mode='r') as oldfile, open('countries.tmp', mode='w', newline='') as newfile:
reader = csv.reader(oldfile, delimiter=';', quotechar='"')
writer = csv.writer(newfile, delimiter=';', quotechar='"', quoting=csv.QUOTE_MINIMAL)
for row in reader:
price = int(row[2])
if row[1] == "USA":
price = price*2
writer.writerow([row[0], row[1], price])
os.replace('countries.tmp', 'countries.csv')
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/339529.html
