什么是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)
結果:
發現上面寫入后中間多了一行,如何解決這一行呢?
加入參數“newline=‘’”
# 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+'
來源:https://www.cnblogs.com/qican/p/11122206.htmlhttps://www.cnblogs.com/qican/p/11122206.html