日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Python?修改CSV文件實例詳解_python

作者:盼小輝丶 ? 更新時間: 2022-10-22 編程語言

前言

由于?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

欄目分類
最近更新