目錄python
逗號分隔值(Comma-Separated Values,CSV,有時也稱爲字符分隔值,由於分隔字符也能夠不是逗號),其文件以純文本形式存儲表格數據(數字和文本)。mysql
# 下面都是csv文件的內容格式 1,2,3,4,5 1,2,"1,3" 1,2,"a,""f"
它有如下規範:sql
只須要打開一個文件,按照CSV的格式,編寫內容,而後寫入文件中去便可。json
from pathlib import Path p = Path(r'E:\Python - base - code\chapter06文件\test.csv') p.touch() csv_body = '''\ no,name,age,comment 1,daxin,20,"I Like Cat" 2,tom,30,"I Like Movice" 3,ben,40,"I""m super man # "" 表示" 4xyz" ''' with open(p,'a+') as f: f.write(csv_body)
Python提供的csv模塊用於處理csv文件,主要經過讀(reader)
和寫(writer)
兩種方式:socket
csv模塊的reader方法,用於讀模式打開一個csv文件,返回一個reader對象
,是一個行迭代器
。它的基本格式爲:函數
csv.reader(iterable, dialect='excel',**fmtparams)
dialect
:表示使用excel的方言(標準)去讀取**fmtparams
: 對excel的規範進行自定義設置能夠設置的參數有:編碼
通常使用doublequote=True
,按照默認的來)
QUOTE_MINIMAL
特殊字符字段,Excel方言使用該規則建議都是用默認規則spa
from pathlib import Path import csv p = Path(r'E:\Python - base - code\chapter06文件\test.csv') with open(p, 'r') as f: reader = csv.reader(f) print(next(reader)) # ['no', 'name', 'age', 'comment'] 逗號分隔好的一行列表 for line in reader: print(line) # ['no', 'name', 'age', 'comment'] # ['1', 'daxin', '20', 'I Like Cat'] # ['2', 'tom', '30', 'I Like Movice'] # ['3', 'ben', '40', 'I"m super man\n4xyz']
csv模塊的writer方法,用於寫模式打開一個csv文件,返回一個DictWriter對象
。它的基本格式爲:excel
writer(fileobj, dialect='excel', *args, **kwargs):
它包含兩個主要的方法:code
writerow(row)
:寫一行writerows(rows)
:寫多行注意,這裏的row須要是一個列表
from pathlib import Path import csv p = Path(r'E:\Python - base - code\chapter06文件\test.csv') rows = [ ['1', 'daxin', '20', 'I Like Cat'], ['2', 'tom', '30', 'I Like Movice'], ['3', 'ben', '40', 'I"m super man\n4xyz'] ] with open(p, 'a+') as f: writer = csv.writer(f) writer.writerow(rows[0]) # 寫一行 writer.writerows(rows) # 寫多行
觀察生成好的csv文件,發現每一行,後面都會多一行空行,這是由於在寫的時候把一行文本的結尾\r\n轉換成兩個回車寫入的,因此官方建議咱們在打開文件的時候,添加newline=''
參數,來組織替換。讀取時也可使用newline參數(不會影響原來的讀取效果)
with open(p, 'a+', newline='') as f: writer = csv.writer(f) writer.writerow(rows[0]) # 寫一行 writer.writerows(rows) # 寫多行
做爲配置文件,ini文件格式很流行。著名的配置文件還有:json,yaml,xml等。下面是一個ini格式的文件(mariadb就是用的是這種格式的配置文件)
[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock symbolic-links=0 [mysqld_safe] log-error=/var/log/mariadb/mariadb.log pid-file=/var/run/mariadb/mariadb.pid
其中:
中括號
裏面的部分稱爲section
,譯做節、區、段。key
稱爲option
選項。configparser模塊的ConfigParser類就是用來操做ini文件的。能夠將section當作key,section存儲着鍵值對組成的字典,能夠把ini配置文件當作一個嵌套的字典。默認使用的是有序字典。
注意:在Python中的configparser庫中,DEFAULT是缺省section的名字,必須大寫,必須存在。當其餘section中不存在某個option中時,會在DEFAULT中尋找對應的option,若是不存在則提示異常或者調用fallback。
ConfigParser對象中有不少方法,其中與讀取配置文件,判斷配置相關的方法有:
read
: 讀取一個ini配置文件sections
:返回一個包含全部章節的列表has_sections
:判斷章節是否存在items
:以元祖的形式返回全部的選項options
:返回一個包含章節下全部選項的列表has_option
:判讀某個選項是否存在get
、getboolean
、getinit
、getfloat
:獲取選項的值ConfigParser對象也提供了許多方法便於咱們修改配置文件:
remove_section
:刪除一個章節add_section
:添加一個章節remote_option
:刪除一個選項set
:添加一個選項(寫入的全部值,都是字符串)write
:將ConfigParser對象中保存的數據保存的文件中去 解析一個配置文件,須要先建立一個ConfigParser對象,建立ConfigParser對象時有多個參數,其中比較重要的是allow_no_value
,allow_no_value默認取值爲False
,表示在配置文件中是否容許有沒有選項的值的狀況。默認狀況下每一個選項都應該有一個值,可是在一些特殊的應用選項下,選項存在即爲真,不存在即爲假,好比MySQL的配置文件skip-external-locking。因此若是須要解析這樣的參數,那麼就須要在實例化的時候添加allow_no_value 爲True
config.read(filenames, encoding=None,allow_no_value=False):
讀取ini文件,能夠是單個文件,也能夠是文件列表。能夠指定文件編碼。
對Configparser對象的操做還可使用字典的方式:
from configparser import ConfigParser from pathlib import Path p = Path('mysql.ini') config = ConfigParser() config.read(p) config['daxin'] = {'name':'daxin','age':20} # 新建一個section print(config['daxin']['name']) # daxin
在Configparser內部,其實使用的就是一個OrderDict存儲的