網站首頁 編程語言 正文
什么是 CSV 文件
CSV 文件(逗號分隔值文件)是一種純文本文件,它使用特定的結構來排列表格數據。因為它是一個純文本文件,所以只能包含實際的文本數據,換句話說就是可打印的 ASCII 或 Unicode 字符。
通常,CSV 文件的結構由其名稱給出,使用逗號分隔每個特定數據值。
column 1 name,column 2 name, column 3 name
first row data 1,first row data 2,first row data 3
second row data 1,second row data 2,second row data 3
...
每條數據是如何用逗號分隔的。第一行為數據列的名稱,有的時候也可以為空第一行就是實際的數據。之后的每一行都是實際數據,僅受文件大小限制。
CSV 文件從何而來?
CSV 文件通常由處理大量數據的程序創建。從電子表格和數據庫中導出數據以及在其他程序中導入。例如可以將數據挖掘程序的結果導出為 CSV 文件,然后將其導入電子表格以分析數據、生成圖表以進行演示或準備發布報告。
CSV 文件非常容易以編程方式處理。任何支持文本文件輸入和字符串操作的語言(如 Python)都可以直接處理 CSV 文件。
CSV 庫解析 CSV 文件
csv 庫提供讀取和寫入 CSV 文件的功能。專為使用 Excel 生成的 CSV 文件開箱即用而設計,適應各種 CSV 格式。該 csv 庫包含對象和其他代碼,用于從 CSV 文件讀取、寫入和處理數據。
讀取 CSV 文件
CSV 文件使用 Python 的內置open()函數作為文本文件打開,該函數返回一個文件對象。然后使用 reader 對象完成從 CSV 文件中的讀取。
employee_birthday.txt
name,department,birthday month
John Smith,Accounting,November
Erica Meyers,IT,March
直接讀取的方法。
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'Column 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.')
字典方式讀取的方法。
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 month
? ? John Smith works in the Accounting department, and was born in November.
? ? Erica Meyers works in the IT department, and was born in March.
Processed 3 lines.
CSV reader 參數
reader 對象可以通過指定附加參數來處理不同樣式的 CSV 文件。
delimiter 指定用于分隔每個字段的字符,默認值為逗號 (‘,’)。
quotechar 指定用于包圍包含分隔符的字段的字符,默認值為雙引號 ( ’ " ')。
escapechar 指定用于轉義分隔符的字符以防不使用引號,默認是沒有轉義字符。
employee_addresses.txt
name,address,date joined
john smith,1132 Anywhere Lane Hoboken NJ, 07030,Jan 4
erica meyers,1234 Smith Lane Hoboken NJ, 07030,March 2
此 CSV 文件包含三個字段:name、address 和 date joined,由逗號分隔。問題是 address 字段的數據還包含一個逗號來表示郵政編碼。
思考一下這個應該怎么處理?
CSV 文件的寫入
CSV 文件的寫入可以使用 .write_row() 方法進行操作。
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'])
quotechar 用來包圍含特殊字符的字段,排除歧義使用。
quoting的幾種控制引號行為情況:
csv.QUOTE_NONNUMERIC) # 非數字加引號
csv.QUOTE_ALL # 所有字段加引號
csv.QUOTE_MINIMAL # 特殊字段加引號
csv.QUOTE_NONE # 都不加引號
字典方式寫入。
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'})
employee_file2.csv
emp_name,dept,birth_month
John Smith,Accounting,November
Erica Meyers,IT,March
使用 pandas 庫解析 CSV 文件
pandas 是一個開源 Python 庫,提供高性能的數據分析工具和易于使用的數據結構,可以共享數據、代碼、分析結果、可視化和敘述性文本。
pandas 讀取 CSV 文件
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可以快速的讀取。
import pandas
df = pandas.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
使用pandas讀取數據時可以格式化日期格式。
import pandas
df = pandas.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
pandas 寫入 CSV 文件
讀取到 pandas 的內容可以直接寫入到新的 csv 文件。
import pandas
df = pandas.read_csv('hrdata.csv',
index_col='Employee',
parse_dates=['Hired'],
header=0,
names=['Employee', 'Hired', 'Salary', 'Sick Days'])
df.to_csv('hrdata_modified.csv')
print(df)
Employee,Hired,Salary,Sick Days
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
原文鏈接:https://blog.csdn.net/qq_20288327/article/details/124097783
相關推薦
- 2024-03-09 【Redis】Redis 實現分布式Session
- 2022-01-09 Echarts|Stacked Line Chart(折線圖堆疊)Y軸數據不正確問題
- 2022-12-13 Android?Loop機制中Looper與handler詳細分析_Android
- 2023-05-08 Python中Generators教程的實現_python
- 2024-07-13 通過maven基于springboot項目構建腳手架archetype
- 2023-04-27 阿里低代碼框架lowcode-engine自定義設置器詳解_React
- 2022-10-29 STDC分割網絡:onnx推理
- 2022-03-21 詳解c++優先隊列priority_queue的用法_C 語言
- 最近更新
-
- 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同步修改后的遠程分支