Python- 표준 라이브러리 (공통 모듈)

소개 : 우리가 불가능하지는 노력을 집중하고있다 않기 때문에 중요도가 다른 모듈로 구분하는 이유는,이 모든 것을 파악하는 것은 불가능하다,

그러나 이것은 중요성이 낮은 정도 이해 할 수없는 것을 의미하지 않는다!

각 모듈의 포인트는, 특정 기능 모듈의 이름을 생각할 수 구현할 필요가 다음 해당 사용을 찾기 위해 자신의 데이터를 확인 갈 때 미래에 뭔가를 할 것입니다 마스터해야합니다

모듈의 .logging

로그로 변환 로깅

그 질문은 로그가 무엇입니까?

로그 등 교육 로그 대학교 수, 작업 로그,로, 무슨 일이 있었는지 실제로 어떤 시점을 기록하는 일기입니다

왜 로그인?

주로 미래의 검토를 위해 실제 생활에서 로깅,

예를 들어, 부서 뛰어난 공로상 학생 다음에 대해 이야기하는 것을 자신의 일상 기록 대학 교사, 대통령은 교사에 해당하는 보상을 원하지만 각 교사는 반드시 가르치는 사람 기억하지 않는 클래스를 많이 가르쳐 때문에 이 시간 당신은 정보의 교육 요구를 얻기 위해 로그를 볼 수 있습니다

제품의 일부는, 로그를 생성하여, 당신이 제품의 동일한 배치로 다른 제품을 찾을 수 있습니다 실패 이유만으로 또 다른 예를 들어, 공장의 생산 로그, 재 작업하는 경우, 또는 로그를 통해 부품 공급 업체를 찾을 수 , 해결하기 위해 의사 소통!

프로그램 로그

우리의 프로그램은 읽을 수 없습니다 사용자가 해결되지 않습니다 사용자가 다른 시스템 환경을 다운로드 한 후, 문제가 의미가없는 그림에 표시된 오류 메시지를 볼 수있는 직접 사용 중에 발생할 수있는 개발 될 것이며이 시간이 모든 작업을 수행 할 수있는 사용자, 프로세스의 코드 실행이 문제를 신속하게 찾을 수있는 로그 프로그래머의 내용을 분석하여, 기록

요약하면 : 로그는 이벤트를 기록하는 데 사용됩니다

유용한 정보를 추출하기 위해 로그 파일을 분석하기 위해 로그인하고 즉각적인 효과가 없지만, 문제가있을 때 프로그램

로깅 모듈은 무엇입니까

파이썬 로깅 모듈이 제공된다 기록 수단

왜 로깅

매우 편리합니다, 우리는 다음 로그에 기록 파일을 열 수 있지만, 이러한 작업을 반복하고 기술적 인 내용, 그래서 우리는 우리가 단지 로그에있을 수있는 간단한 호출 인터페이스를 필요 후 로깅, 파이썬 패키지를 수 있도록했다 !

로그 수준

로깅을 시작하기 전에 또한 로그 수준을 지워야

시간이 지남에 따라 로그 라인의 수천, 얼마나 빨리 문제가되었다 필요한 로그를 찾기 위해, 매우 큰

용액 로그 레벨로 분할한다

모듈은 낮은 높은에서, 다섯 단계에 로그인 로그인 있습니다 :

1.info 일반 정보

2.debug 디버깅 정보

3.warning 경고

4.error 오류 메시지

5.cretical 심각한 오류

그들은 낮은 높이에서, 본질 수준을 나타내는 번호를 사용하는 것은 10, 20

로깅 모듈을 사용하여

#1.导入模块
import logging

#2.输出日志
logging.info("info")
logging.debug("debug")
logging.warning("warning")
logging.error("error")
logging.critical("critical")

#输出 WARNING:root:warning
#输出 ERROR:root:error
#输出 CRITICAL:root:critical

우리는 그 수준이 충분하지 않습니다 때문입니다, 정보 및 디버그 출력을 찾을 수 없습니다

기본값 :

기록의 낮은 레벨의 경고를 표시하고, 대응하는 값은 30

저널은 콘솔에 인쇄

출력 형식 로그 : 이름 로그 로그 생성 수준 메시지

그것을 쓰는이의 기본 동작을 수정하는 방법?이 자신을 구성하는 우리를 필요

사용자 정의 구성

import logging
logging.basicConfig()

"""可用参数
filename:用指定的文件名创建FiledHandler(后边会具体讲解handler的概念),这样日志会被存储在指定的文件中。
filemode:文件打开方式,在指定了filename时使用这个参数,默认值为“a”还可指定为“w”。
format:指定handler使用的日志显示格式。 
datefmt:指定日期时间格式。 
level:设置rootlogger(后边会讲解具体概念)的日志级别 
"""

#案例:
logging.basicConfig(
    filename="aaa.log",
    filemode="at",
    datefmt="%Y-%m-%d %H:%M:%S %p",
    format="%(asctime)s - %(name)s - %(levelname)s - %(module)s: %(message)s",
    level=10
)

사용할 수있는 모든 이름 형식

%(name)s:Logger的名字,并非用户名,详细查看
%(levelno)s:数字形式的日志级别
%(levelname)s:文本形式的日志级别
%(pathname)s:调用日志输出函数的模块的完整路径名,可能没有
%(filename)s:调用日志输出函数的模块的文件名
%(module)s:调用日志输出函数的模块名
%(funcName)s:调用日志输出函数的函数名
%(lineno)d:调用日志输出函数的语句所在的代码行
%(created)f:当前时间,用UNIX标准的表示时间的浮 点数表示
%(relativeCreated)d:输出日志信息时的,自Logger创建以 来的毫秒数
%(asctime)s:字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
%(thread)d:线程ID。可能没有
%(threadName)s:线程名。可能没有
%(process)d:进程ID。可能没有
%(message)s:用户输出的消息

이 시점에서 우리가 이미 기록 된 기본 정보를 구성하는 소유 할 수 있지만, 우리는 출력에 다른 위치에 동일한 로그온 할 때, 다음과 같은 기본 구성이 달성 될 수 없다,

예를 들어, 볼 수있는 보스 프로그래머 중복 복사본을 생성하는 동안 로그인 레지스터 기능, 로깅을 필요가 그는 상관하지 않기 때문에, 프로그래머는, 두 번째 상사가 간단해야,보다 상세한 로그를 볼 수 프로그램의 세부 사항

이를 위해 우리는 시스템 모듈 loggin에의 요구를 이해할 필요가있다

네 중추적 인 역할 로깅 모듈

로그인 로그 생성기는 1.Logger을 생산

로그 필터는 2.Filter 로그

3.Handler 프로세서 포맷 로그 로그온 지정된 위치에 출력 (파일 또는 콘솔)

4.Formater 처리 로그 형식

로그 전체 수명주기

- 상기 바인딩에 모든 프로세서> 3. 로그 메시지 - 상기 출력 포맷에 따른> 4 프로세서 바운드 로그에게 기록 장치에 의해 생성 한 로그 개체 -> 2 필터는 필터링 할 것인지 여부를 판정한다

로그 레벨이 상기 레벨 설정은 수행되지 않는다 미만이면 체크하는 첫 단계

두 번째 단계는 이후의 반복 지점에서 사용되는 객체 지향 기술을 사용하여 많은 이용 장면이 필요

세 번째 단계는, 출력 이상의 경우, 얻어진 로그 로그 레벨 낮지 로그 레벨을 확인

빌더 수준은 핸들 이하 또는 수준이 이해가되지 않습니다 설정 처리한다

처리기 (20)는, 예를 들면, 상기 발전기 (30)에 제공되는 설정

30 다음 로그는 그들이 생산하지 않을 수 있습니다

네 번째 단계는 기본 형식에 따라 형식을 지정하지 않은 경우

다양한 역할을 사용하여 로그인 (이해)

# 生成器
logger1 = logging.getLogger("日志对象1")

# 文件句柄
handler1 = logging.FileHandler("log1.log",encoding="utf-8")
handler2 = logging.FileHandler("log2.log",encoding="utf-8")

# 控制台句柄
handler3 = logging.StreamHandler()


# 格式化对象
fmt1 = logging.Formatter(
    fmt="%(asctime)s - %(name)s - %(levelname)s:  %(message)s",
    datefmt="%m-%d %H:%M:%S %p")
fmt2 = logging.Formatter(
    fmt="%(asctime)s - %(levelname)s :  %(message)s",
    datefmt="%Y/%m/%d %H:%M:%S")

# 绑定格式化对象与文件句柄
handler1.setFormatter(fmt1)
handler2.setFormatter(fmt2)
handler3.setFormatter(fmt1)

# 绑定生成器与文件句柄
logger1.addHandler(handler1)
logger1.addHandler(handler2)
logger1.addHandler(handler3)

# 设置日志级别
logger1.setLevel(10)    #生成器日志级别
handler1.setLevel(20)   #句柄日志级别

# 测试
logger1.debug("debug msessage")
logger1.info("info msessage")
logger1.warning("warning msessage")
logger1.critical("critical msessage")

때마다 같은 코드를 작성하기 때문에 매우 고통스러운, 이것은 우리는 이미 위의 요구 사항을 달성 할 수있다, 그러나 이것은 우리의 궁극적 인 구현되지 않습니다

로깅 상속 (이해)

당신은 다른 하위 로그의 로그로 지정 또는 자손 로그 기록 할 수있다

상속의 아들의 존재를 수신 할 때 로그 레벨 로그는 로그를 전달됩니다

상속을 지정합니다 :

import  logging

log1 = logging.getLogger("mother")
log2 = logging.getLogger("mother.son")
log3 = logging.getLogger("mother.son.grandson")

# handler
fh = logging.FileHandler(filename="cc.log",encoding="utf-8")
# formatter
fm = logging.Formatter("%(asctime)s - %(name)s -%(filename)s - %(message)s")

# 绑定
log1.addHandler(fh)
log2.addHandler(fh)
log3.addHandler(fh)
# 绑定格式
fh.setFormatter(fm)
# 测试
# log1.error("测试")
# log2.error("测试")
log3.error("测试")
# 取消传递
log3.propagate = False
# 再次测试
log3.error("测试")

모듈 구성을 사전에 로그인하여 (초점)

때마다 매우 귀찮은 구성하는 코드를 작성, 우리는 전체 구성을 작성할 수 있습니다 직접 이후의 사용을 위해 저장

import logging.config
logging.config.dictConfig(LOGGING_DIC)
logging.getLogger("aa").debug("测试")

LOGGING_DIC 템플릿

standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \
                  '[%(levelname)s][%(message)s]' #其中name为getlogger指定的名字

simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'

id_simple_format = '[%(levelname)s][%(asctime)s] %(message)s'
logfile_path = "配置文件路径"

LOGGING_DIC = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'standard': {
            'format': standard_format
        },
        'simple': {
            'format': simple_format
        },
    },
    'filters': {},
    'handlers': {
        #打印到终端的日志
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',  # 打印到屏幕
            'formatter': 'simple'
        },
        #打印到文件的日志,收集info及以上的日志
        'default': {
            'level': 'DEBUG',
            'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件
            'formatter': 'standard',
            'filename': logfile_path,  # 日志文件
            'maxBytes': 1024*1024*5,  # 日志大小 5M
            'backupCount': 5, #日志文件最大个数
            'encoding': 'utf-8',  # 日志文件的编码
        },
    },
    'loggers': {
        #logging.getLogger(__name__)拿到的logger配置
        'aa': {
            'handlers': ['default', 'console'],  # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
            'level': 'DEBUG',
            'propagate': True,  # 向上(更高level的logger)传递
        },
    },
}

그는 추가 :

getLogger 매개 변수는 기본 키 생성기가 반환됩니다 일치가없는 경우, 우리는 기본에 사전을 생성하기 위해 빈 키를 설정할 수 있습니다, 사전 로거에 해당하는 키입니다

'loggers': {
        # 把key设置为空
        '': {
            'handlers': ['default', 'console'],  # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
            'level': 'DEBUG',
            'propagate': True,  # 向上(更高level的logger)传递
        },
    },

이 출력 로그에 제공 모듈을 호출 할 때이 기능은 미래에 사용할 수 있습니다

logging.info ( "테스트 메시지!")

시스템이 루트라는 기본 이름을 생성했기 때문에 또한, 우리는, 로그 생성의 경우 처음 사용을 지정하지 않았지만,도 사용할 수있다

마지막으로, 요구 사항을하기 전에 완료 :

그는 프로그램을 상관하지 않았기 때문에 볼 수있는 보스 프로그래머, 하나 중복을 생성하는 동안 등록 기능의 기호 로깅,가 필요합니다, 프로그래머가보다 상세한 로그를 볼 수, 두 번째 보스는 간단합니다 세부

# 程序员看的格式
standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \
                  '[%(levelname)s][%(message)s]' #其中name为getlogger指定的名字
logfile_path1 = "coder.log"

# 老板看的格式
simple_format = '[%(levelname)s][%(asctime)s]%(message)s'
logfile_path2 = "boss.log"


LOGGING_DIC = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'standard': {
            'format': standard_format
        },
        'simple': {
            'format': simple_format
        },
    },
    'filters': {},
    'handlers': {
        #打印到终端的日志
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',  # 打印到屏幕
            'formatter': 'simple'
        },
        #打印到文件的日志,收集info及以上的日志
        'std': {
            'level': 'DEBUG',
            'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件
            'formatter': 'standard',
            'filename': logfile_path1,  # 日志文件
            'maxBytes': 1024*1024*5,  # 日志大小 5M
            'backupCount': 5, #日志文件最大个数
            'encoding': 'utf-8',  # 日志文件的编码
        },
        'boss': {
            'level': 'DEBUG',
            'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件
            'formatter': 'simple',
            'filename': logfile_path2,  # 日志文件
            'maxBytes': 1024 * 1024 * 5,  # 日志大小 5M
            'backupCount': 5,  # 日志文件最大个数
            'encoding': 'utf-8',  # 日志文件的编码
        }
    },
    'loggers': {
        #logging.getLogger(__name__)拿到的logger配置
        'aa': {
            'handlers': ['std', 'console',"boss"],  # 这里把上面定义的handler都加上,即log数据会同时输出到三个位置
            'level': 'INFO',
            'propagate': True,  # 向上(更高level的logger)传递
        },
    },
}

두 .os 모듈

운영 체제는 os 모듈 운영 체제를 사용할 필요를 처리하는 기능을 제공, 운영 체제 변환

운영 체제를 처리 할 때 그래서 우리는 필요?

운영 체제에서, 우리는 가장 일반적인 동작은 당신이 파일을 조작 할 필요가있을 때 파일 및 폴더의 작업이 때문에, 당신은 os 모듈을 생각해야한다는 것입니다있다

OS는 어떤 기능을 제공

os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("dirname")  改变当前脚本工作目录;相当于shell下cd
os.curdir  返回当前目录: ('.')
os.pardir  获取当前目录的父目录字符串名:('..')
os.makedirs('dirname1/dirname2')    可生成多层递归目录
os.removedirs('dirname1')    若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir('dirname')    生成单级目录;相当于shell中mkdir dirname
os.rmdir('dirname')    删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.listdir('dirname')    列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.remove()  删除一个文件
os.rename("oldname","newname")  重命名文件/目录
os.stat('path/filename')  获取文件/目录信息
os.sep    输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
os.linesep    输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"
os.pathsep    输出用于分割文件路径的字符串 win下为;,Linux下为:
os.name    输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
os.system("bash command")  运行shell命令,直接显示
os.environ  获取系统环境变量

세 .os.path 모듈

처리 경로에 대한 모듈, 파이썬은 크로스 플랫폼 언어, 각 운영 체제에 대한 두 알고, 파일 경로가 다른 플랫폼 학생에 제대로 실행하는 프로그램을 가능하게하기 위해, 매우 다른, 파이썬 모듈을 제공하는의를 사용 다른 경로로 구현 될 수있는 모듈이 자동적으로 크로스 플랫폼을 달성하기 위하여, 고객의 제품 변환

지금까지 미래의 파일 또는 폴더 경로로, 당신은 모듈을 사용한다

기능을 제공합니다 :

os.path.abspath(path)  返回path规范化的绝对路径
os.path.split(path)  将path分割成目录和文件名二元组返回
os.path.dirname(path)  返回path的目录。其实就是os.path.split(path)的第一个元素
os.path.basename(path)  返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
os.path.exists(path)  如果path存在,返回True;如果path不存在,返回False
os.path.isabs(path)  如果path是绝对路径,返回True
os.path.isfile(path)  如果path是一个存在的文件,返回True。否则返回False
os.path.isdir(path)  如果path是一个存在的目录,则返回True。否则返回False
os.path.join(path1[, path2[, ...]])  将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
os.path.getatime(path)  返回path所指向的文件或者目录的最后存取时间
os.path.getmtime(path)  返回path所指向的文件或者目录的最后修改时间
os.path.getsize(path) 返回path的大小
normcase函数
在Linux和Mac平台上,该函数会原样返回path,在windows平台上会将路径中所有字符转换为小写,并将所有斜杠转换为饭斜杠。
>>> os.path.normcase('c:/windows\\system32\\')   
'c:\\windows\\system32\\'   
   
normpath函数
规范化路径,如..和/
>>> os.path.normpath('c://windows\\System32\\../Temp/')   
'c:\\windows\\Temp'   

>>> a='/Users/jieli/test1/\\\a1/\\\\aa.py/../..'
>>> print(os.path.normpath(a))
/Users/jieli/test1

네 .subprocess

자식 프로세스라는 하위 프로세스, 프로세스는 실행중인 프로그램입니다

왜 명령의 결과를 얻을 수 있기 때문에 그의 이전 os.system을 () 함수의 자식을 사용하고, 다른 문제가 우리가 시작했을 때 다른 프로세스가 자식 프로세스와 통신 할 수 있다는 것입니다,

당신은 파이썬 프로그램에서 시스템 명령을 실행하려는 경우, 당신은 하위 프로세스 사용해야 자동화 된 작업 및 유지 보수가 자주 사용됩니다

#测试
res = os.system("python")
print(res)
# res结果为执行状态

서브 프로세스 사용

import subprocess

p = subprocess.Popen("ls",shell=True)
#shell=True 告诉系统这是一个指令 而不是某个文件名
#此时效果与sys.system()没有任何区别,都是将结果输出到控制台

# 那如何与这个进程交互数据呢,这需要用到三个参数
1.stdin  表示输入交给子进程的数据
2.stdout 表示子进程返回的数据
3.stderr 表示子进程发送的错误信息

#这三个参数,的类型都是管道,(管道本质就是一个文件,可以进行读写操作),使用subprocess.PIPE来获取一个管道
케이스 :

세 개의 매개 변수의 중요성을 이해 한 후에의 작은 기능을 구현하자

자식 프로세스의 작업 목록 명령은 작업의 모든 정보를 얻을, 그 결과는 찾아 다른 프로세스에 전달

또 다른 자식 프로세스는 작업 정보 FINDSTR를 찾을 수

p1 = subprocess.Popen("tasklist",shell=True,stdout=subprocess.PIPE)
p2 = subprocess.Popen("findstr smss",shell=True,stdin=p1.stdout,stdout=subprocess.PIPE)
print(p2.stdout.read())

요약 : 서브 프로세스는 주로 시스템 명령을 수행 sys.system 차이를 대조하는 데 사용되는 데이터가 프로세스 사이에서 교환 될 수 있다는

다섯 .SYS 모듈

SYS 시스템, 시스템의 약자입니다,하지만 조심

SYS는 운영 체제 대신에, 인터프리터 자체를 의미

이 모듈은 때문에 통역자의 처리 동작과 연관된

함수와 속성을 제공합니다 :

sys.argv           命令行参数List,第一个元素是程序本身路径
sys.exit(n)        退出程序,正常退出时exit(0)
sys.version        获取Python解释程序的版本信息
sys.maxint         最大的Int值
sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform       返回操作系统平台名称

당신이 명령 줄 프로그램을 개발하려는 콘솔에서 입력 매개 변수를 수신하는 인수 속성을 제공하는이 호텔은 매우 중요하다

케이스 : 명령 줄 인터페이스 파일 복사 도구를 개발

아이디어 : 첫번째 파라미터는 대상 파일에 대한 세번째 파라미터를, 두번째 파라미터 소스 파일을 수신 받기위한, 현재 실행 파일 자체

import sys

source_path = sys.argv[1]
target_path = sys.argv[2]
print(source_path)
print(target_path)
with open(source_path, "rb") as f1:
    with open(target_path, "wb") as f2:
        while True:
            data = f1.read(1024)
            if not data:
                break
            f2.write(data)

여섯 .confiparser

confiparser는 해상도를 구성하는 번역, 그가 구성 파일을 구문 분석하는 데 사용되는 것이 분명하다

프로파일은 무엇인가?

프로그램의 준비를위한 파일 구성 정보

구성 정보는 무엇입니까?

프로그램의 확장 성을 개선하기 위해, 우리는 등 천둥 다운로드 디렉토리, 동시 다운로드 수, 전분기 톤으로, 결정하기 위해 사용자에게 프로그램의 값의 일부를 사용해야합니다,

정보의 데이터 구성은 두 가지 조건을 충족해야합니다으로

1. 데이터의 값은 고정되어 있지

2. 사용자에 의해 지정 될 수있다

예를 들어, 우리는 모든 시간의 입력을 필요하지 않을 수 우리가 구성 파일에 사용자의 이름과 암호를 쓸 수있는 사용의 용이성에 대한 사인온 기능을

쓰기 구성 파일 형식

적절하게 해결해야 할 우선 코드를 읽을 파일이 모듈을 포장하기 때문에 순서가 고정 측 방식에 따라 작성해야하며, 자신의 프로필의 형식을 알고 있어야합니다 모듈을 사용하기 전에 물론,뿐만 아니라 프로파일 파이썬이 다른 언어는 없다,하지만 형식은 동일합니다!

형식 :

프로파일 데이터의 두 가지 유형이 나타날 수 있습니다

괄호 안의 첫 번째 분할 부는 예를 들어, 파티션의 이름 : ATM]

두 번째 옵션 옵션 이름 = 값

참고 :

당신은 파티션 이름을 복제 할 수 없습니다

당신은 파티션의 같은 이름으로 같은 옵션을 가질 수 없습니다

값은 문자열과 인용 부호로 둘러싸이지 않은 모든 종류의 수 있습니다

confiparser 사용

데이터 읽기

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"))

추가, 삭제, 수정,

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','user'))


#添加一个标题
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'))

파일을 작성하는 코드를 생성

import configparser

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

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

수정 및 구성 파일을 만들 수 있지만 일반적으로 사용되지 수 있지만, 구성 파일을 구문 분석에 대한 요약 configparser는 핵심 기능을 해결하는 것입니다!

세븐 .shevle 모듈

이 모듈은 파이썬의 데이터를 serialize하는 데 사용되지만, 이미 shevle가 된 이유 피클의 순서가있다?

간단 shevle 때문에, 그리고 읽기를 캡슐화 및 운영 .load 덤프 파일 쓰기 작업,

사전 같은 객체, 읽기 및 쓰기를 반환 열기 만 기능, 키는 문자열이어야하고 값은 데이터 유형 파이썬을 지원 할 수있다

그것은 어떤 구분 사전없이 지속적인 보는 사전 기능과 함께 메모리 및 동작 모드로 볼 수있다

#保存数据
s = shelve.open("shv.shv")
s["name"] = "jack"

#取出数据
s = shelve.open("shv.shv")
print(s["name"])
#输出 jack

#关闭资源
s.close

八 .shutil

이 모듈은 파일 정보를 가져,보다 다양한 파일 조작 기능, 압축, 압축 해제를 제공한다

이 기능을 제공합니다 :

    shutil.copyfileobj   拷贝文件 提供两个文件对象 长度表示缓冲区大小
    shutil.copyfile(src, dst) 拷贝文件 提供两个文件路径 
    shutil.copymode()  拷贝文件权限 提供两个文件路径
    shutil.copystat(src, dst) 拷贝文件状态信息 最后访问 最后修改 权限 提供两个文件路径
    shutil.copy(src, dst) 拷贝文件和权限   提供两个文件路径
    shutil.copy2(src, dst) 拷贝文件和状态信息 提供两个文件路径

    shutil.ignore_patterns("mp3","*.py")
    shutil.copytree(src, dst, symlinks=False, ignore=None) 拷贝目录  
    symlinks默认False将软连接拷贝为硬链接  否则拷贝为软连接
    
    shutil.rmtree 删除目录 可以设置忽略文件
    shutil.move(src, dst)   移动目录和文件

압축 및 압축 해제 테스트

import shutil
#压缩,  文件名 格式  需要压缩的文件所在文件夹
shutil.make_archive("压缩测试","zip",r"/Users/jerry/PycharmProjects/备课/常用模块五期")
#解压缩 #压缩,  文件名  解压后的文件存放目录
shutil.unpack_archive("压缩测试.zip",r"/Users/jerry/PycharmProjects/备课/常用模块五期/
                      
# #压缩当前执行文件所在文件夹内容到当前目录
# shutil.make_archive("test","zip")
#
# #压缩root_dir指定路径的文件到当前目录
# shutil.make_archive("test","zip",root_dir=r"/Users/jerry/PycharmProjects/work/re模块")
#

# #压缩root_dir指定路径的文件到base_name指定路径
# shutil.make_archive("/Users/jerry/PycharmProjects/work/压缩文件/test","zip",root_dir=r"/Users/jerry/PycharmProjects/work/re模块")

                      
# #压缩root_dir指定路径的文件到base_name指定的压缩文件  压缩文件仅包含re模块下的的内容
# shutil.make_archive("test",
#                     "zip",
#                     root_dir=r"/Users/jerry/PycharmProjects/work",)


# 当指定base_dir时  则优先使用base_dir 与root_dir不同的是 压缩文件不仅包含re模块下的内容 还包括re模块的完整文件夹层级
# # 解压后得到Users ->jerry -> PycharmProject->work->re模块
# shutil.make_archive("test",
#                     "zip",
#                     root_dir=r"/Users/jerry/PycharmProjects/work/re模块",
#                     base_dir=r"/Users/jerry/PycharmProjects/work/re模块")
 
                      

추천

출처www.cnblogs.com/yangyuanhu/p/11220172.html