您好,登錄后才能下訂單哦!
這篇文章主要介紹“Python怎么讀取和寫入操作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 字段的數據還包含一個逗號來表示郵政編碼。
有三種方法可以處理這個。
使用不同的分隔符,使用delimiter可選參數來指定新的分隔符。
將數據括在引號,選擇的分隔符的特殊性質在帶引號的字符串中會被忽略。quotechar 可以使用可選參數指定用于引用的字符。
轉義數據中的分隔符,轉義字符的工作方式與它們在格式字符串中的作用一樣,使對被轉義字符(在本例中為分隔符)的解釋無效。如果使用轉義字符,則必須使用 escapechar 可選參數指定。
可以使用 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文件”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。