18 csv檔案 ini檔案處理

2021-09-13 14:52:36 字數 4273 閱讀 5973

目錄

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 ...