今天閑來無事,寫了會CSV,簡單總結下csv具體操作
什么是csv
逗號分隔值(Comma-Separated Values,CSV,有時也稱為字符分隔值,因為分隔字符也可以不是逗號),其文件以純文本形式存儲表格數據(數字和文本)
讀csv文件
1、首先導入CSV模板
2、創建一個CSV文件對象
3、打開文件進行讀取
# coding:utf-8 import csv f = csv.reader(open('1111.csv','r')) for i in f: print(i) 代碼結果: ['測試1', '軟件測試工程師'] ['測試2', '軟件測試工程師'] ['測試3', '軟件測試工程師'] ['測試4', '軟件測試工程師'] ['測試5', '軟件測試工程師']
寫入CSV文件
1、首先導入CSV模塊
2、創建一個CSV文件對象
3、進行寫入CSV文件
# coding:utf-8 import csv data = [ ("測試1",'軟件測試工程師'), ("測試2",'軟件測試工程師'), ("測試3",'軟件測試工程師'), ("測試4",'軟件測試工程師'), ("測試5",'軟件測試工程師'), ] f = open('222.csv','w') writer = csv.writer(f) for i in data: writer.writerow(i) f.close()
寫入后打開文件發現亂碼了
解決方法:
1、導入codecs模塊
2、使用cpdecs打開文件
# coding:utf-8 import csv import codecs data = [ ("測試1",'軟件測試工程師'), ("測試2",'軟件測試工程師'), ("測試3",'軟件測試工程師'), ("測試4",'軟件測試工程師'), ("測試5",'軟件測試工程師'), ] f = codecs.open('222.csv','w','gbk') writer = csv.writer(f) for i in data: writer.writerow(i) f.close()
這個時候發現不會亂碼了
編碼和解碼
CSV文件其他用法
csv.DictReader()用法:
# 將CSV 數據讀進列表中(首先查找是否使用給定字段名,如果沒有,就是用第一行作為鍵) # coding:utf-8 import csv data = [ ("測試1",'軟件測試工程師1'), ("測試3",'軟件測試工程師3'), ("測試4",'軟件測試工程師4'), ("測試5",'軟件測試工程師5'), ] f1 = open('222.csv','r') reader = csv.DictReader(f1) for i in reader: print(i) f1.close() 代碼結果: [('測試1', '測試3'), ('軟件測試工程師1', '軟件測試工程師3')] [('測試1', '測試4'), ('軟件測試工程師1', '軟件測試工程師4')] [('測試1', '測試5'), ('軟件測試工程師1', '軟件測試工程師5')]
csv.DictWriter()用法
# 直接字典字段寫入到CSV文件中 # coding:utf-8 import csv data = {'id':'123','name':'anjing','age':'26'} with open('123.csv','w')as f: fieldnames = {'id','name','age'} # 表頭 writer = csv.DictWriter(f,fieldnames=fieldnames) writer.writeheader() writer.writerow(data)
結果:
發現上面寫入后中間多了一行,如何解決這一行呢?
加入參數“enwline=‘’”
# coding:utf-8 import csv data = {'id':'123','name':'anjing','age':'26'} # 加入參數“enwline=''” with open('123.csv','w',newline='')as f: fieldnames = {'id','name','age'} writer = csv.DictWriter(f,fieldnames=fieldnames) writer.writeheader() writer.writerow(data)
寫讀追加狀態
'r':讀
'w':寫
'a':追加
'r+' == r+w(可讀可寫,文件若不存在就報錯(IOError))
'w+' == w+r(可讀可寫,文件若不存在就創建)
'a+' ==a+r(可追加可寫,文件若不存在就創建)
對應的,如果是二進制文件,就都加一個b就好啦:
'rb' 'wb' 'ab' 'rb+' 'wb+' 'ab+'