python讀寫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)

結果:

 發現上面寫入后中間多了一行,如何解決這一行呢?

加入參數“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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM