<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
最流行的資料交換格式之一是 CSV 格式。是需要通過鍵盤和控制檯以外的方式將資訊輸入和輸出的程式,通過文字檔案交換資訊是在程式之間共用資訊的常用方法。
這裡帶和我一起回顧學習如何使用 Python 從文字檔案中讀取、處理和解析 CSV。
CSV 檔案(逗號分隔值檔案)是一種純文字檔案,它使用特定的結構來排列表格資料。因為它是一個純文字檔案,所以它只能包含實際的文字資料,換句話說就是可列印的ASCII或Unicode字元。
CSV 檔案的結構由其名稱給出。通常 CSV 檔案使用逗號分隔每個特定資料值。
column 1 name,column 2 name, column 3 name 1st row data 1,1st row data 2,1st row data 3 2nd row data 1,2nd row data 2,2nd row data 3
注意每條資料是如何用逗號分隔的。通常第一行標識每條資料換句話說,就是資料列的名稱。之後的每一行都是實際資料,並且受檔案大小限制。
通常分隔符(,)逗號不是唯一使用的。其他流行的分隔符包括製表符 ( t)、冒號 ( : ) 和分號 ( ; ) 字元。
正確解析 CSV 檔案需要知道正在使用哪個分隔符。
CSV 檔案從何而來?
CSV 檔案通常由處理大量資料的程式建立。它們是從電子試算表和資料庫中匯出資料以及在其他程式中匯入或使用資料的便捷方式。例如可以將資料探勘程式的結果匯出為 CSV 檔案,然後將其匯入電子試算表以分析資料、生成圖表以進行演示或準備釋出報告。
CSV 檔案非常容易以 Python程式設計方式處理,可以直接處理 CSV 檔案。
csv庫專為使用 Excel 生成的 CSV 檔案開箱即用而設計,並且適應各種 CSV 格式。
CSV 檔案使用 Python 的內建 open() 函數作為文字檔案開啟,該函數返回一個檔案物件,然後將其傳遞給 reader 執行讀取工作。
# employee_birthday.txt name,department,birthday John,IT,November Tom,IT,March
讀取操作程式碼,返回的每一行reader都是一個元素列表,String其中包含通過刪除分隔符找到的資料。返回的第一行包含以特殊方式處理的列名。
import csv with open('employee_birthday.txt') as csv_file: csv_reader = csv.reader(csv_file, delimiter=',') line_count = 0 for row in csv_reader: if line_count == 0: print(f'names are {", ".join(row)}') line_count += 1 else: print(f't{row[0]} works in the {row[1]} department, and was born in {row[2]}.') line_count += 1 print(f'Processed {line_count} lines.') names are name, department, birthday John works in the IT department, and was born in November. Tom works in the IT department, and was born in March. Processed 3 lines.
除了處理單個String元素的列表,還可以將 CSV 資料直接讀入字典。
import csv with open('employee_birthday.txt', mode='r') as csv_file: csv_reader = csv.DictReader(csv_file) line_count = 0 for row in csv_reader: if line_count == 0: print(f'Column names are {", ".join(row)}') line_count += 1 print(f't{row["name"]} works in the {row["department"]} department, and was born in {row["birthday month"]}.') line_count += 1 print(f'Processed {line_count} lines.') Column names are name, department, birthday John works in the IT department, and was born in November. Tom works in the IT department, and was born in March. Processed 3 lines.
delimiter 指定用於分隔每個欄位的字元。預設值為逗號 ( ’ , ')。
quotechar 指定用於包圍包含分隔符的欄位的字元。預設值為雙引號 ( ’ " ')。
escapechar 指定用於跳脫分隔符的字元,以防不使用引號。預設是沒有跳脫字元。
name,address,date joined john,1132 Anywhere Lane Hoboken NJ, 07030,Jan 4 erica,1234 Smith Lane Hoboken NJ, 07030,March 2
此 CSV 檔案包含三個欄位:name、address和date joined,它們由逗號分隔。問題是該 address 欄位的資料還包含一個逗號來表示郵政編碼。
有三種方法可以處理這個。
可以使用 writer 物件和 .write_row() 方法寫入 CSV 檔案。
import csv with open('employee_file.csv', mode='w') as employee_file: employee_writer = csv.writer(employee_file, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL) employee_writer.writerow(['John Smith', 'Accounting', 'November']) employee_writer.writerow(['Erica Meyers', 'IT', 'March'])
csv.QUOTE_MINIMAL means only when required, for example, when a field contains either the quotechar or the delimiter
csv.QUOTE_ALL means that quotes are always placed around fields.
csv.QUOTE_NONNUMERIC means that quotes are always placed around
fields which do not parse as integers or floating point numbers.
csv.QUOTE_NONE means that quotes are never placed around fields.
csv.QUOTE_MINIMAL: writer物件只參照那些包含特殊字元。
csv.QUOTE_ALL: writer物件參照所有欄位,如欄位分隔符,quotechar或任何字元 lineterminator。
csv.QUOTE_NONNUMERIC: writer物件參照所有非數位欄位,指示讀者將所有非參照欄位轉換為float型別。
csv.QUOTE_NONE: writer物件不參照欄位,如未設定escapechar錯誤丟擲;指示reader不對引號字元執行特殊處理。
John Smith,Accounting,November Erica Meyers,IT,March
編寫字典時需要 DictReader 引數。
import csv with open('employee_file2.csv', mode='w') as csv_file: fieldnames = ['emp_name', 'dept', 'birth_month'] writer = csv.DictWriter(csv_file, fieldnames=fieldnames) writer.writeheader() writer.writerow({'emp_name': 'John Smith', 'dept': 'Accounting', 'birth_month': 'November'}) writer.writerow({'emp_name': 'Erica Meyers', 'dept': 'IT', 'birth_month': 'March'})
可以先安裝 pandas 庫。
pip install pandas
# hrdata.csv Name,Hire Date,Salary,Sick Days remaining Graham Chapman,03/15/14,50000.00,10 John Cleese,06/01/15,65000.00,8 Eric Idle,05/12/14,45000.00,10 Terry Jones,11/01/13,70000.00,3 Terry Gilliam,08/12/14,48000.00,7 Michael Palin,05/23/13,66000.00,8
使用 pandas 讀取 csv 檔案。
import pandas as pd df = pd.read_csv('hrdata.csv') print(df) Name Hire Date Salary Sick Days remaining 0 Graham Chapman 03/15/14 50000.0 10 1 John Cleese 06/01/15 65000.0 8 2 Eric Idle 05/12/14 45000.0 10 3 Terry Jones 11/01/13 70000.0 3 4 Terry Gilliam 08/12/14 48000.0 7 5 Michael Palin 05/23/13 66000.0 8
增加索引列讀取 csv 檔案,這樣索引序號就沒有了。
import pandas as pd df = pd.read_csv('hrdata.csv', index_col='Name') print(df) Hire Date Salary Sick Days remaining Name Graham Chapman 03/15/14 50000.0 10 John Cleese 06/01/15 65000.0 8 Eric Idle 05/12/14 45000.0 10 Terry Jones 11/01/13 70000.0 3 Terry Gilliam 08/12/14 48000.0 7 Michael Palin 05/23/13 66000.0 8
修復Hire Date欄位的資料型別為日期資料。
import pandas as pd df = pd.read_csv('hrdata.csv', index_col='Name', parse_dates=['Hire Date']) print(df) Hire Date Salary Sick Days remaining Name Graham Chapman 2014-03-15 50000.0 10 John Cleese 2015-06-01 65000.0 8 Eric Idle 2014-05-12 45000.0 10 Terry Jones 2013-11-01 70000.0 3 Terry Gilliam 2014-08-12 48000.0 7 Michael Palin 2013-05-23 66000.0 8
也可以統一進行處理。
import pandas as pd df = pd.read_csv('hrdata.csv', index_col='Employee', parse_dates=['Hired'], header=0, names=['Employee', 'Hired','Salary', 'Sick Days']) print(df) Hired Salary Sick Days Employee Graham Chapman 2014-03-15 50000.0 10 John Cleese 2015-06-01 65000.0 8 Eric Idle 2014-05-12 45000.0 10 Terry Jones 2013-11-01 70000.0 3 Terry Gilliam 2014-08-12 48000.0 7 Michael Palin 2013-05-23 66000.0 8
寫入操作和讀取操作一樣簡單。
import pandas as pd df = pd.read_csv('hrdata.csv', index_col='Employee', parse_dates=['Hired'], header=0, names=['Employee', 'Hired', 'Salary', 'Sick Days']) df.to_csv('hrdata_modified.csv')
到此這篇關於詳解Python讀取和寫入操作CSV檔案的方法的文章就介紹到這了,更多相關Python讀取寫入CSV內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45