1. 程式人生 > 程式設計 >Python3操作讀寫CSV檔案使用包過程解析

Python3操作讀寫CSV檔案使用包過程解析

CSV(Comma-Separated Values)即逗號分隔值,一種以逗號分隔按行儲存的文字檔案,所有的值都表現為字串型別(注意:數字為字串型別)。

如果CSV中有中文,應以utf-8編碼讀寫,如果要支援Excel檢視,應是要用utf-8 with bom格式及utf-8-sig

Python3操作CSV檔案使用自帶的csv包

reader=csv.reader(f,delimiter=','):用來讀取資料,reader為生成器,每次讀取一行,每行資料為列表格式,可以通過delimiter引數指定分隔符

writer=csv.writer(f):用來寫入資料,按行寫入,writer支援writerow(列表)單行寫入,和writerows(巢狀列表)批量寫入多行,無須手動儲存。

當檔案中有標題行時,可以使用header=next(reader)先獲取到第一行的資料,再進行遍歷所有的資料行。
寫入時,可以先使用writer.writerow(標題行列表),寫入標題行,再使用writer.writerows(多行資料巢狀列表),寫入多行資料(也可以逐行寫入)。

資料檔案data.csv:

name,password
abc,123456
張五,123#456
張#abc123,123456
666,123456
a b,123456

讀取示例:

import csv
with open('data.csv',encoding='utf-8') as f:
  reader = csv.reader(f)
  header = next(reader)
  print(header)
  for row in reader:
    print(row)

注意:reader必須在檔案開啟的上下文中使用,否則檔案被關閉後reader無法使用
所有的數字被作為字串,如果要使用數字格式,應使用int()/float()做相應轉換

寫入示例:

import csv
header = ['name','password','status']
data = [
  ['abc','123456','PASS'],['張五','123#456',['張#abc123',['666',['a b','PASS']
]
with open('result.csv','w',encoding='utf-8',newline='') as f:
  writer = csv.writer(f)
  writer.writerow(header)
  writer.writerows(data)

注意,開啟檔案時應指定格式為w,文字寫入,不支援wb,二進位制寫入,當然,也可以使用a/w+/r+

開啟檔案時,指定不自動新增新行newline='',否則每寫入一行就或多一個空行。

如果想寫入的檔案Excel開啟沒有亂碼,utf-8可以改為utf-8-sig。

結果展示,result.csv內容::

name,password,status
abc,123456,PASS
張五,123#456,PASS
張#abc123,PASS
666,PASS
a b,PASS

使用字典格式的資料:DictReader,DictWriter#

注意資料必須有標題行時才能使用

reader=csv.DictReader(f):直接將標題和每一列資料組裝成有序字典(OrderedDict)格式,無須再單獨讀取標題行
writer=csv.DictWriter(f,標題行列表):寫入時可使用writer.writeheader()寫入標題,然後使用writer.writerow(字典格式資料行)或write.writerows(多行資料)

讀取示例:

import csv
with open('data.csv',encoding='utf-8') as f:
  reader = csv.DictReader(f)
  for row in reader:
    print(row['name'],row['password'])

寫入示例:

import csv

header = ['name','status']

data = [
  {'name':'abc','password':'123456','status':'PASS'},{'name':'張五','password':'123#456',{'name':'張#abc123',{'name':'666',{'name':'a b','status':'PASS'}
]


with open('result2.csv',newline='') as f:
  writer = csv.DictWriter(f,header)
  writer.writeheader()
  writer.writerows(data)

寫入結果,同result.csv

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。