網站首頁 編程語言 正文
前言
由于?CSV
文件僅僅是簡單的文本文件,因此更新?CSV
文件中內容的最佳方式是首先讀取文件中的數據,并將它們處理為 Python
內部對象,進行更改,然后以相同的格式覆蓋原始數據。
Python 修改CSV文件
在本節中,我們將學習如何使用?Python
修改 CSV
文件中的數據。
假設在CSV文件中有以下數據,其中用戶 '1
' 對電影 'Star Wars
' 的評分有誤,其實際評分為 7.9
,因此需要修改此文件。
User name | Movie name | rating |
---|---|---|
1 | Star Wars | 7.8 |
2 | Back to Future | 8 |
2 | Batman | 7.7 |
3 | Spy 007 | 8.3 |
首先,導入 csv
模塊并定義文件名:
>>> import csv >>> file_name = 'movies_rating.csv'
導入 csv
模塊后,我們從指定?csv
文件中提取所有數據。為了便于操作,我們在 with
塊中打開該文件,在文件使用完畢后可以自動關閉文件句柄。
使用?DictReader
可以非常方便地將數據轉換為字典列表,其中標頭作為鍵,單元格中的內容作為值,例如第一行的數據被轉換為?{'User name': 1, 'Movie name': 'Star Wars', 'rating':7.8}
。
然后,我們可以操作和修改格式化后的數據。
使用 DictReader
讀取文件的內容并將此內容轉換為數據行的列表:
>>> with open(file_name, newline='') as f: ... data = [row for row in csv.DictReader(f)] ...
檢查獲得的數據,將文件中第一個評分記錄中的評分數據從 7.8
?修改為 7.9
,解決數據錯誤問題:
>>> data [OrderedDict([('User name', '001'), ('Movie name', 'Star Wars'), ('rating', '7.8')]), OrderedDict([('User name', '002'), ('Movie name', 'Back to Future'), ('rating', '8.0')]), OrderedDict([('User name', '002'), ('Movie name', 'Batman'), ('rating', '7.7')]), OrderedDict([('User name', '003'), ('Movie name', 'Spy 007'), ('rating', '8.3')])] >>> data[0]['rating'] '7.8' >>> data[0]['rating'] = 7.9
在本節中,我們通過直接訪問行號來修改數據,但在通常情況下,我們可能需要首先搜索特定信息,確定相應行后再進行修改。
再次打開文件并存儲修改后的數據記錄:
>>> header = data[0].keys() >>> with open(file_name, 'w', newline='') as f: ... writer = csv.DictWriter(f, fieldnames=header) ... writer.writeheader() ... writer.writerows(data) ...
數據修改后,我們直接覆蓋原文件并使用 DictWriter
存儲數據。DictWriter
需要通過聲明字段名?(fieldnames=header
) 來定義列上的字段,為了獲得這些字段名,我們可以先讀取其中一行數據字典的鍵并將它們存儲在 header
?中。
原文件以 w
模式再次打開以覆蓋它。DictWriter
首先使用 writeheader
存儲標頭,然后通過調用 writerows()
一次存儲所有行。我們也可以通過調用 writerow()
方法每次寫入一行數據。
在電子表格軟件中檢查結果。在下圖中可以看到,該文件使用 WPS
?軟件打開顯示,可以看到第一行的評分數據已經被修改:
原文鏈接:https://juejin.cn/post/7135663467037458468
相關推薦
- 2021-12-08 DBeaver下載安裝詳細教程_數據庫其它
- 2022-03-28 C語言實現紅黑樹詳細步驟+代碼_C 語言
- 2022-04-11 C++中函數重載詳解_C 語言
- 2023-01-03 利用C++模擬實現STL容器:list_C 語言
- 2022-12-25 一文帶你熟悉Go語言中的for循環_Golang
- 2022-12-05 python中的腳本性能分析_python
- 2023-09-12 git 忽略掉不需要的文件
- 2022-05-17 Springboot+Maven做啟動類與業務模塊分離的架構模式
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支