1. 程式人生 > >第二十一章 configparser、subprocess

第二十一章 configparser、subprocess

name 結果 parse 條件 mys rem 點擊 spa user

1、confiparser

1. 什麽是配置文件? 什麽是配置信息?

  用於編寫程序的配置信息的文件;為了提高程序的擴展性

2. 配置信息的數據要滿足兩個條件

  1.數據的值不是固定的

  2.可以有用戶來指定

3. 配置文件的格式

  配置文件中只能出現兩中數據類型:

  1.section 分區 [‘文件名’]

  2.option 選項 名稱=值/ key = value 形式

  註:不能出現重復的分區名;同一個分區下不能有相同的選項名;只可以是任意類型,且字符串不需要加

    引號

4.

import configparser


#獲取解析器對象
config=configparser.ConfigParser()
# 讀取某個配置文件
config.read(‘a.cfg‘)

#查看所有的分區
res=config.sections() #[‘section1‘, ‘section2‘]
print(res)

#查看標題section1下所有key=value的key
options=config.options(‘section1‘)
print(options) #[‘k1‘, ‘k2‘, ‘user‘, ‘age‘, ‘is_admin‘, ‘salary‘]

#查看標題section1下所有key=value的(key,value)格式


item_list=config.items(‘section1‘)
print(item_list) #[(‘k1‘, ‘v1‘), (‘k2‘, ‘v2‘), (‘user‘, ‘egon‘), (‘age‘, ‘18‘), (‘is_admin‘, ‘true‘), (‘salary‘, ‘31‘)]

#查看標題section1下user的值=>字符串格式
val=config.get(‘section1‘,‘user‘)
print(val) #egon

#由於使用前需要進行轉換,所以模塊封裝了轉換類型的功能,只需要調用對應的函數即可,如下:
val1=config.getint(‘section1‘,‘age‘)


val2=config.getboolean(‘section1‘,‘is_admin‘)
val3=config.getfloat(‘section1‘,‘salary‘)

#是否存在某選項
print(cfg.has_option("mysql","name"))
#是否存在某分區
print(cfg.has_section("db"))

5.添加,刪除,修改

import configparser

config=configparser.ConfigParser()
config.read(‘a.cfg‘,encoding=‘utf-8‘)

#刪除整個標題section2
config.remove_section(‘section2‘)

#刪除標題section1下的某個k1和k2
config.remove_option(‘section1‘,‘k1‘)
config.remove_option(‘section1‘,‘k2‘)

#判斷是否存在某個標題
print(config.has_section(‘section1‘))

#判斷標題section1下是否有user
print(config.has_option(‘section1‘,‘‘))


#添加一個標題
config.add_section(‘jack‘)

#在標題egon下添加name=egon,age=18的配置
config.set(‘jack‘,‘name‘,‘egon‘) # 如果已存則覆蓋原來的值
#config.set(‘jack‘,‘age‘,18) #報錯,必須是字符串

#最後將修改的內容寫入文件,完成最終的修改
config.write(open(‘a.cfg‘,‘w‘))

6.

import configparser

config = configparser.ConfigParser()
config.add_section("setion1")
config.set("setion1","name","zhangsn")

with open("test.config","w") as f:
config.write(f)

2、confiparser

子進程

什麽是進程
指的是一個正在運行中的程序
子進程指的是由另個一進程開啟的進程 a在運行過程中 開啟了b b就是a的子進程

為什麽要開啟子進程
當一個程序在運行過程中有一個任務,自己做不了或是不想做 就可以開啟另一個進程來幫助其完成任務
例如 qq中收到一個鏈接 點擊鏈接 就開啟了; 瀏覽器 瀏覽器就是qq的子進程


可以理解為用於執行系統指令的模塊
 三個管道
p1 = subprocess.Popen("dirs",shell=True,stdout=subprocess.PIPE,stderr=-1)
print(p1.stdout.read())
print(p1.stderr.read().decode("GBK"))

案例:
tasklist | findstr python # 先執行tasklist 把結果交給 findstr 來處理

p1 = subprocess.Popen("tasklist",shell=True,stdout=subprocess.PIPE)

p2 = subprocess.Popen("findstr QQ",shell=True,stdin=p1.stdout,stdout=subprocess.PIPE,stderr=subprocess.PIPE)

print(p2.stdout.read())
print(p2.stderr.read())

3、xlrd

xlrd 模塊是用於讀取表格數據的 
xlrd 是一個第三方的需要自己安裝 pip install xlrd

打開文件
wb
wb = xlrd.open_workbook("路徑")
# 獲取某個表格
sheet = wb.sheet_by_name()
sheet = wb.sheet_by_index()

# 獲取行數
sheet.nrows()
# 獲取列數
sheet.ncols()

# 取某行數據
sheet.row_values(行索引)

# 獲取某單元格的數據
sheet.cell(行,列).value

第二十一章 configparser、subprocess