python讀寫csv文件


csv釋義

逗號分隔值(Comma-Separated Values,CSV,有時也稱為字符分隔值,因為分隔字符也可以不是逗號),其文件以純文本形式存儲表格數據(數字和文本)。純文本意味着該文件是一個字符序列,不含必須像二進制數字那樣被解讀的數據。CSV文件由任意數目的記錄組成,記錄間以某種換行符分隔;每條記錄由字段組成,字段間的分隔符是其它字符或字符串,最常見的是逗號或制表符。通常,所有記錄都有完全相同的字段序列。通常都是純文本文件。建議使用WORDPAD或是記事本(NOTE)來開啟,再則先另存新檔后用EXCEL開啟,也是方法之一。

讀取csv文件

reader(filename),可以使用reader()方法來創建一個對象從csv文件中讀取數據。

官方文檔:csv.reader(csvfile, dialect='excel', **fmtparams)  //csvfile是任何可以迭代的對象(如果是文件對象則用newline=''來打開它),dialect翻譯為方言用於定制解析器來解析數據,**fmtparams為解析器參數

讀文件時,輸入數據的每一行都會解析,並返回一個列表

創建一個csv文件寫入如下數據,python讀取:

 

>>> with open('test.csv','r',newline='') as csvfile:
... reader = csv.reader(csvfile)>>> for i in reader:
... print(i)
... 
['name', 'tel', 'address', 'age']
['zhang', '15111111111', 'beijing', '33']
['li', '13822222222', 'wuhan', '28']
['liu', '15933333333', 'hainan', '25']

 

寫csv文件

writer(filename),使用writer方法來寫數據

csv.writer(csvfile, dialect='excel', **fmtparams)  //參數與讀完全基本相同

寫一段代碼來測試

import csv
with open('test1.csv','w',newline='') as f:
    writer = csv.writer(f)
    writer.writerow(('name', 'tel', 'address', 'age'))
    writer.writerow(('zhang', 15111111111, 'beijing', 33))
    writer.writerow(('li', 13822222222, 'wuhan', 28))
    writer.writerow(('liu', 15933333333, 'hainan', 25))
with open('test1.csv','r',newline='') as f:
    reader = csv.reader(f)
    for i in reader:
        print(i)
結果:

['name', 'tel', 'address', 'age']
['zhang', '15111111111', 'beijing', '33']
['li', '13822222222', 'wuhan', '28']
['liu', '15933333333', 'hainan', '25']

發現結果與輸入不同,默認引號模式的原因

寫文件時可用quoting來設置引號模式

默認為:writer = csv.writer(f,quoting=csv.QUOTE_NONNUMERIC)  //非數字加引號

可改為:

QUOTE_ALL:所有字段加引號

QUOTE_MINIMAL:特殊字段加引號

QUOTE_NONE:都不加引號

方言

用於定制解析器,無需將各個參數單獨傳入閱讀器和書寫器,可以組成一起構成一個方言對象

標准庫包括兩個方言:excel和excel-tabs,默認為excel

csv方言參數:

屬性 默認值 含義
delimiter , 字段分隔符
doublequote True 控制quotechar實例是否成對
escapechar None 指示一個轉義序列
lineterminator \r\n 書寫器使用這個結束一行
quotechar " 用來包圍含特殊字符的字段
quoting QUOTE_MINIMAL 控制引號行為
skipinitialspace False 忽略字符定界符前的空白符

 

 

 

 

 

 

 

 

將”行“轉換為字典

DictReader和DictWriter類將行轉化為字典而非行

官方文檔:class csv.DictReader(csvfile, fieldnames=None, restkey=None, restval=None, dialect='excel', *args, **kwds)

參數說明:

fieldnames:字典的鍵,默認為第一行數據

restkey:若所讀行字段多余給出的鍵個數,剩余鍵由restkey給出

restkey:若所讀行字段少於給出的鍵個數,剩余值由restval給出

例如上述test1.csv文件

with open('test1.csv','r',newline='') as f:
    reader = csv.DictReader(f)
    for i in reader:
        print(i)
結果:

{'address': 'beijing', 'name': 'zhang', 'age': '33', 'tel': '15111111111'}
{'address': 'wuhan', 'name': 'li', 'age': '28', 'tel': '13822222222'}
{'address': 'hainan', 'name': 'liu', 'age': '25', 'tel': '15933333333'}

DictWriter類似DictReader,提供一個列表作為鍵

writer = csv.DictWriter(f,list)

官方文檔:class csv.Dictwriter(csvfile, fieldnames, restval='', extrasaction='raise', dialect='excel', *args, **kwds)

更多詳細解釋可訪問python標准庫

 


免責聲明!

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



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