Python 修改CSV文件實(shí)例詳解
前言
由于 CSV 文件僅僅是簡(jiǎn)單的文本文件,因此更新 CSV 文件中內(nèi)容的最佳方式是首先讀取文件中的數(shù)據(jù),并將它們處理為 Python 內(nèi)部對(duì)象,進(jìn)行更改,然后以相同的格式覆蓋原始數(shù)據(jù)。
Python 修改CSV文件
在本節(jié)中,我們將學(xué)習(xí)如何使用 Python 修改 CSV 文件中的數(shù)據(jù)。
假設(shè)在CSV文件中有以下數(shù)據(jù),其中用戶 '1' 對(duì)電影 'Star Wars' 的評(píng)分有誤,其實(shí)際評(píng)分為 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 |
首先,導(dǎo)入 csv 模塊并定義文件名:
>>> import csv >>> file_name = 'movies_rating.csv'
導(dǎo)入 csv 模塊后,我們從指定 csv 文件中提取所有數(shù)據(jù)。為了便于操作,我們?cè)?with 塊中打開(kāi)該文件,在文件使用完畢后可以自動(dòng)關(guān)閉文件句柄。
使用 DictReader 可以非常方便地將數(shù)據(jù)轉(zhuǎn)換為字典列表,其中標(biāo)頭作為鍵,單元格中的內(nèi)容作為值,例如第一行的數(shù)據(jù)被轉(zhuǎn)換為 {'User name': 1, 'Movie name': 'Star Wars', 'rating':7.8}。
然后,我們可以操作和修改格式化后的數(shù)據(jù)。
使用 DictReader 讀取文件的內(nèi)容并將此內(nèi)容轉(zhuǎn)換為數(shù)據(jù)行的列表:
>>> with open(file_name, newline='') as f: ... data = [row for row in csv.DictReader(f)] ...
檢查獲得的數(shù)據(jù),將文件中第一個(gè)評(píng)分記錄中的評(píng)分?jǐn)?shù)據(jù)從 7.8 修改為 7.9,解決數(shù)據(jù)錯(cuò)誤問(wèn)題:
>>> 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
在本節(jié)中,我們通過(guò)直接訪問(wèn)行號(hào)來(lái)修改數(shù)據(jù),但在通常情況下,我們可能需要首先搜索特定信息,確定相應(yīng)行后再進(jìn)行修改。
再次打開(kāi)文件并存儲(chǔ)修改后的數(shù)據(jù)記錄:
>>> header = data[0].keys() >>> with open(file_name, 'w', newline='') as f: ... writer = csv.DictWriter(f, fieldnames=header) ... writer.writeheader() ... writer.writerows(data) ...
數(shù)據(jù)修改后,我們直接覆蓋原文件并使用 DictWriter 存儲(chǔ)數(shù)據(jù)。DictWriter 需要通過(guò)聲明字段名 (fieldnames=header) 來(lái)定義列上的字段,為了獲得這些字段名,我們可以先讀取其中一行數(shù)據(jù)字典的鍵并將它們存儲(chǔ)在 header 中。
原文件以 w 模式再次打開(kāi)以覆蓋它。DictWriter 首先使用 writeheader 存儲(chǔ)標(biāo)頭,然后通過(guò)調(diào)用 writerows() 一次存儲(chǔ)所有行。我們也可以通過(guò)調(diào)用 writerow() 方法每次寫(xiě)入一行數(shù)據(jù)。
在電子表格軟件中檢查結(jié)果。在下圖中可以看到,該文件使用 WPS 軟件打開(kāi)顯示,可以看到第一行的評(píng)分?jǐn)?shù)據(jù)已經(jīng)被修改:

以上就是Python 修改CSV文件實(shí)例詳解的詳細(xì)內(nèi)容,更多關(guān)于Python 修改CSV文件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python pandas入門(mén)系列之眾數(shù)和分位數(shù)
分位數(shù)(Quantile),也稱分位點(diǎn),是指將一個(gè)隨機(jī)變量的概率分布范圍分為幾個(gè)等份的數(shù)值點(diǎn),分析其數(shù)據(jù)變量的趨勢(shì),而眾數(shù)(Mode)是代表數(shù)據(jù)的一般水平,這篇文章主要給大家介紹了Python pandas系列之眾數(shù)和分位數(shù)的相關(guān)資料,需要的朋友可以參考下2021-08-08
Python基于正則表達(dá)式實(shí)現(xiàn)計(jì)算器功能
這篇文章主要介紹了Python基于正則表達(dá)式實(shí)現(xiàn)計(jì)算器功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
python單例設(shè)計(jì)模式實(shí)現(xiàn)解析
這篇文章主要介紹了python單例設(shè)計(jì)模式實(shí)現(xiàn)解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01
Python使用shutil模塊實(shí)現(xiàn)文件拷貝
這篇文章主要介紹了Python使用shutil模塊實(shí)現(xiàn)文件拷貝,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
numpy 計(jì)算兩個(gè)數(shù)組重復(fù)程度的方法
今天小編就為大家分享一篇numpy 計(jì)算兩個(gè)數(shù)組重復(fù)程度的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-11-11
python使用IP歸屬地查詢API追蹤網(wǎng)絡(luò)活動(dòng)
這篇文章主要為大家介紹了python使用IP歸屬地查詢API追蹤網(wǎng)絡(luò)活動(dòng)實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09
Python3之不使用第三方變量,實(shí)現(xiàn)交換兩個(gè)變量的值
今天小編就為大家分享一篇Python3之不使用第三方變量,實(shí)現(xiàn)交換兩個(gè)變量的值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06
Swin?Transformer圖像處理深度學(xué)習(xí)模型
這篇文章主要為大家介紹了Swin?Transformer圖像處理深度學(xué)習(xí)模型詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03

