目錄
2 ini檔案處理
2.3 字典的訪問方式
逗號分隔值(comma-separated values,csv,有時也稱為字元分隔值,因為分隔字元也可以不是逗號),其檔案以純文字形式儲存**資料(數字和文字)。
# 下面都是csv檔案的內容格式
1,2,3,4,5
1,2,"1,3"
1,2,"a,""f"
它有以下規範:
行分隔符為\r\n,最後一行可以沒有換行符
列分隔符常為逗號或者製表符。每一行稱為一條記錄record
字段可以使用雙引號括起來,也可以不使用。如果字段**現了雙引號、逗號、換行符必須使用雙引號括起來。
如果欄位的值是雙引號,需要額外使用乙個個雙引號,表示乙個轉義。
表頭可選,和字段列對齊就行了。
只需要開啟乙個檔案,按照csv的格式,編寫內容,然後寫入檔案中去即可。
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)
兩種方式:
csv模組的reader方法,用於讀模式開啟乙個csv檔案,返回乙個reader物件
,是乙個行迭代器
。它的基本格式為:
csv.reader(iterable, dialect='excel',**fmtparams)
可以設定的引數有:
delimiter:列分隔符(逗號)
lineterminator:行分隔符\r\n
quotechar:欄位的引用符號,預設為 " 雙引號
雙引號的處理(一般使用doublequote=true
,按照預設的來)
quoting 指定雙引號的規則
建議都是用預設規則
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物件
。它的基本格式為:
writer(fileobj, dialect='excel', *args, **kwargs):
它包含兩個主要的方法:
注意,這裡的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
其中:
configparser模組的configparser類就是用來操作ini檔案的。可以將section當做key,section儲存著鍵值對組成的字典,可以把ini配置檔案當做乙個巢狀的字典。預設使用的是有序字典。
注意:在python中的configparser庫中,default是預設section的名字,必須大寫,必須存在。當其他section中不存在某個option中時,會在default中尋找對應的option,如果不存在則提示異常或者呼叫fallback。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'] = # 新建乙個section
print(config['daxin']['name']) # daxin
在configparser內部,其實使用的就是乙個orderdict儲存的
posted @
2019-03-18 22:05
dahlhin 閱讀(
...)
編輯收藏
ini檔案處理
import configparser cfg configparser.configparser read ok cfg.read e test mysql.ini 操作之前必須先 read到記憶體中 print read ok print cfg.sections print cfg.defau...
csv檔案處理
今天先簡單的使用一些csv檔案處理的一些常用方法,後面使用到numpy pandas等模組時再補充。csv檔案格式的通用標準並不存在,可以參看rfc 4180 逗號分隔值 comma separated values,csv,有時也成為了字元分隔,因為分隔字元也可以不是逗號 其檔案以純文字形式儲存 ...
csv檔案處理
1 讀入檔案 讀入csv檔案的方式有兩種,一種是pd.dataframe.from csv 另一種是pd.read csv 兩種讀入csv檔案的方式本身沒有實質性的區別,二者都基於相同的函式功能實現,但是有一些引數的預設值不同。推薦使用的是pd.read csv,pd.dataframe.from ...