我正在嘗試在 csv 檔案上寫入一個欄位,然后在控制臺上列印它,但是在寫入后列印第一行時,它顯示一個數字 10(我沒有添加到該欄位中。然后當我我只是讀取檔案并列印它第二行顯示了我應該在第一次嘗試時寫的內容,但顯示 \ufeff
這是代碼
from csv import DictReader
with open('loopbacks2.csv', mode='r ', encoding='utf-8-sig') as csv_file:
client_details = DictReader(csv_file)
for client in client_details:
client['State'] = csv_file.write('Completed')
print(client)
原始 csv 檔案如下所示
Name,Loopback,Object,IP,SSH,State
Device1,192.168.1.2,host1,8.7.6.5/32,2022
Device2,192.168.1.3,host2,8.7.7.2/32,2222
運行腳本時,這是輸出
{'Name': 'Device1', 'Loopback': '192.168.1.2', 'Object': 'host1', 'IP': '8.6.5.6/32', 'SSH': '2022', 'State': 10}
然后我打開檔案,它看起來像這樣
Name,Loopback,Object,IP,SSH,State
Device1,192.168.1.2,host1,8.7.6.5/32,2022
Device2,192.168.1.3,host2,8.7.7.2/32,2222,Completed
然后,如果我評論寫作部分并像這段代碼一樣列印它
from csv import DictReader
with open('loopbacks2.csv', mode='r ', encoding='utf-8-sig') as csv_file:
client_details = DictReader(csv_file)
for client in client_details:
#client['State'] = csv_file.write('Completed')
print(client)
然后提示顯示這個
{'Name': 'Device1', 'Loopback': '192.168.1.2', 'Object': 'host1', 'IP': '8.6.5.6/32', 'SSH': '2022', 'State': ''}
{'Name': 'Device1', 'Loopback': '192.168.1.2', 'Object': 'host1', 'IP': '8.6.5.6/32', 'SSH': '2022', 'State': '\ufeffCompleted'}
我錯過了什么或困惑什么?
提前致謝
uj5u.com熱心網友回復:
您不能通過讀取一行、修改該行然后將同一行寫回原始檔案來編輯檔案。
您的代碼中發生了什么:
client['State'] = csv_file.write('Completed')
print(client)
是你告訴 Python 寫(到檔案末尾)字串 'Completed',它有 10 個位元組長。這就是您在陳述句中看到的10從 中回傳write()和設定的client['State']那個print()。在腳本運行并關閉檔案后,它最后已“完成”。
要編輯檔案:
- 讀取原始檔案
- 找到要修改的資料
- 修改該資料
- 將修改后的資料寫入新檔案
然后如果你想用新的覆寫原來的,那就這樣做。
下面是 Python 的DictReader和DictWriter 的樣子:
import csv
data = []
with open('input.csv', newline='') as f:
reader = csv.DictReader(f)
for row in reader:
row['State'] = 'Completed'
data.append(row)
with open('output.csv', 'w', newline='') as f:
writer = csv.DictWriter(f, fieldnames=data[0].keys())
writer.writeheader()
writer.writerows(data)
此外,當您指定時,在每個檔案開頭寫入\ufeff的 BOM(wiki:UTF-8 位元組順序標記)是utf-8-sig您第一次呼叫csv_file.write(...)添加的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/405162.html
標籤:
