os 모듈, SYS 모듈, JSON 모듈, 피클 모듈, 로깅 모듈

os 모듈

기능 : 운영 체제와 상호 작용하는 데, 당신은 파일을 조작 할 수 있습니다

첫째, 파일 작업

  1. 파일 있는지 확인하려면

os.path.isfile (R '패스')

  1. 파일 삭제

    os.remove () 파일을 삭제하기

  2. 파일 이름 바꾸기

    os.rename (R ', R' ')

둘째, 폴더 조작

os.path.isdir ()는 폴더를 확인 여부

os.mkdir ( 'm2')는 폴더라는 이름의 폴더 m2를 만들려면

if not os.path.exists(r'路径'):#检测路径下文件夹是否存在,如果不存在,就创建文件夹
   os.mkdir(r'路径')      

os.listdir은 (R '주소')는 모든 주소 파일 및 폴더 (*****)를 나열

위해서는, os.rmdir ( 'm2')는라는 파일 폴더 m2를 삭제

보조 기능

os.getcwd ()는 현재 파일 폴더의 경로를 가져옵니다

os.rename ( 'NAME1', 'NAME2') NAME2 이름 바꾸기

__FILE__ 단지 거기 pycharm,

현재 파일의 특정 경로를 가져옵니다

입술 = os.path.join ( '경로 1', '경로 2') 자동 접 경로 , 다른 플랫폼의 경로가 지원 플라이 싱 (창, IOS는 andirod, 리눅스, 유닉스) 다층로 접합하고, 접합 처리 할 수있다 자동 '\'

os.path.abspath (__ FILE__) 자동으로, 현재 파일의 절대 경로를 구하는 다른 운영체제와 슬래시 대체

os.path.dirname abspath 및 폴더의 상부 경로와 연관된 획득.

세 개의 리턴 패스를 os.walk

os.walk () 메소드는 위 또는 아래로, 디렉토리 트리에서 디렉토리에 마이그레이션 출력 파일 이름으로 사용됩니다.

os.walk () 메소드는 파일, 디렉토리 탐색을 사용하기 쉽습니다, 당신은 우리에게 효율적인 처리 파일 사물의 디렉토리 측면을 할 수 있습니다.

유닉스, 윈도우 효과적으로.

거리 () 는 다음과 같이 메소드 구문은 :

os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])

매개 변수 :

  • - 디렉터리를 통과 할 주소, 트리플 (루트, DIRS, 파일)을 반환합니다.
    • 주소를 참조 루트는 현재 폴더 자체를 가로 지르는
    • DIRS이 목록은 모든 내용 (서브 디렉토리를 포함하지 않음) 디렉토리 폴더의 이름입니다
    • 또한 파일 목록, 해당 폴더의 내용 (서브 디렉토리를 포함하지 않음) 모든 파일입니다
  • 하향식 - 선택 사항 (기본적으로)가 상위 디렉토리의 우선 탐색, 또는 하위 디렉토리 우선 탐색 탑, True입니다. 하향식 매개 변수가 true 인 경우, 도보 상위 폴더, 각각의 상위 폴더에 대한 하위 디렉토리를 탐색합니다.
  • 의 OnError - 선택, 도보가 호출됩니다 예외를 필요로하는 호출 객체를 필요로한다.
  • followlinks - true의 경우 선택 사항, 디렉토리의 바로 가기 false의 경우 실제 디렉토리의 의미 내에서 상위 하위 디렉토리의 우선 탐색, (기본적으로 해제) (리눅스에서 소프트 링크 심볼릭 링크입니다) 통과합니다.

반환 값 :

이 메소드는 반환 값이 없습니다.

SYS 모듈

기능 : 파이썬 인터프리터와의 상호 작용

sys.argv에 가장 일반적으로 사용되는 명령 라인을 사용하여 파일로서 동작 할 때, 추가 파라미터는 수신 된리스트 형태로 수신 된 첫 번째 요소는 프로그램 자체의 경로이다.

sys.path를 리턴 경로 탐색 모듈, 환경 변수 초기화 PYTHONPATH의 값을 이용하여

sys.modules.key () 모든 모듈의 목록이 소개되어 반환

JSON 모듈

직렬화

내부 또는 직렬화 프로세스를 저장할 수있는 메모리에서 객체 (변수)라고

직렬화의 장점 :

  1. 상태를 지속하십시오 (구성) 삭제되기 전에 프로그램이 몇 시간 동안 실행하면 메모리가 영구적으로 데이터를 저장되지 않습니다, 우리는 몇 시간 동안 프로그램에 메모리 데이터를 전원을 끄거나 프로그램을 다시 시작합니다. 그러나 전원을 끄거나 데이터를 수행 할 수있는 (파일로 저장) 현재 메모리에 모든 데이터가 저장되어있는 프로그램을 다시 시작하기 전에 다음에 프로그램하기 전에 파일에서로드 한 다음 직렬화되는 계속 될 수있다 .
  2. 크로스 플랫폼 데이터 교환 : 양측 보내고 형식을 잘 실천 한 시퀀스를 수신하기로 합의하는 경우 직렬화 쓰기 직렬화 디스크뿐만 아니라 내용이, 당신은 또한, 다른 컴퓨터에 네트워크를 통해 전송 할 수 있습니다, 그것은 플랫폼을 부러 / 언어 차이 한계는 플랫폼 간 데이터 교환을 달성왔다.

JSON 직렬화는 파이썬, JSON 직렬화는 자바와 다른 언어에 관여 할 것이다 고유 아니므로, 크로스 플랫폼 데이터 전송의 목적을 달성 할 수있는 JSON 직렬화를 사용합니다.

# # 序列化字典为json串,并保存文件
import json
def dic():
    print('func')
with open('test.json', 'w', encoding='utf8') as fw:
    json.dump(dic, fw)

# 反序列化
with open('test.json', 'r', encoding='utf8') as fr:
    data = json.load(fr)
    print(type(data), data)

JSON 파이썬 데이터 유형과 데이터 형식 대응표

JSON 유형 유형 파이썬
{} DICT
[] 명부
"끈" STR
520.13 INT 또는 플로트
허위 사실 허위 사실
없는 없음

(가장 일반적인) 파이썬 사전에서 JSON 문자열이된다

텍스트에서 파이썬 텍스트로 역 직렬화 된 JSON.

json.dump은 () 파일로 직렬화

json.load ()는 하드 디스크 JSON에서 문자열을 가져옵니다

메모리에 순서 json.dumps ()

메모리 스트링으로부터 취득 json.loads JSON ()

피클 모듈

피클 기능 직렬화 및 역 직렬화하지만 그 단점은 중요하지 않은 데이터가 클 저장 만 파이썬과 함께, 즉 정상적으로는 중요하지 않으며 역 직렬화하지 즉,이 장점은 파이썬 저장할 수 갖는다 데이터 객체의 모든 종류.

로깅 모듈

기능 : 로그 생성 모듈

로깅 수준 (설정되어 있지 않은 경우, 기본 디스플레이 30 위)

#V1  日志级别(如果不设置,默认显示30以上)
# logging.info('info')  # 10
# logging.debug('debug')  # 20
# logging.warning('wraning')  # 30
# logging.error('error')  # 40
# logging.critical('critical')  # 50

설정을 추가 V2

# logging.basicConfig(filename='20190927.log',
#                     format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
#                     datefmt='%Y-%m-%d %H:%M:%S %p',
#                     level=10)
#上面模板copy过来然后配置level

# username = 'nick'
# goods = 'bianxingjingang'
# logging.info(f'{username}购物{goods}成功')  # 10

V3의 사용자 지정 구성

# 1. 配置logger对象
nick_logger = logging.Logger('nick')
json_logger = logging.Logger('jason')

# 2. 配置格式
formmater1 = logging.Formatter('%(asctime)s - %(name)s -%(thread)d - %(levelname)s -%(module)s:  %(message)s',
                               datefmt='%Y-%m-%d %H:%M:%S %p ', )

formmater2 = logging.Formatter('%(asctime)s :  %(message)s',
                               datefmt='%Y-%m-%d %H:%M:%S %p', )

formmater3 = logging.Formatter('%(name)s %(message)s', )

# 3. 配置handler --> 往文件打印or往终端打印
h1 = logging.FileHandler('nick.log')
h2 = logging.FileHandler('json.log')
sm = logging.StreamHandler()

# 4. 给handler配置格式
h1.setFormatter(formmater1)
h2.setFormatter(formmater2)
sm.setFormatter(formmater3)

# 5. 把handler绑定给logger对象
nick_logger.addHandler(h1)
nick_logger.addHandler(sm)
json_logger.addHandler(h2)

# 6. 直接使用
nick_logger.info(f'nick 购买 变形金刚 4个')
# json_logger.info(f'json 购买 变形金刚 10个')

로거, 필터, 포맷터 개체 처리기 : 로깅 모듈은 네 개의 역할을 포함

  1. 로거 : 객체 생성 된 로그
  2. 필터 : 개체 필터링 로그
  3. 포맷터 객체 : 당신은 다른 로그 형식으로 객체를 정의하고 다른 로그 형식 처리기를 제어하는 ​​데 사용되는 다른 Handler 객체에 바인딩 할 수 있습니다
  4. 핸들러 : 인쇄 로그와 다른 장소에 콘솔을 수신의 FileHandler는 파일로 인쇄하는 데 사용의 StreamHandler 터미널에 인쇄
#以上可以全部忘记,只要会下面的配置方法
import os
import logging.config

# 定义三种日志输出格式 开始
standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \
                  '[%(levelname)s][%(message)s]'  # 其中name为getLogger()指定的名字;lineno为调用日志输出函数的语句所在的代码行
simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
id_simple_format = '[%(levelname)s][%(asctime)s] %(message)s'
# 定义日志输出格式 结束

logfile_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))  # log文件的目录,需要自定义文件路径 # atm
logfile_dir = os.path.join(logfile_dir, 'log')  # C:\Users\oldboy\Desktop\atm\log

logfile_name = 'log.log'  # log文件名,需要自定义路径名

# 如果不存在定义的日志目录就创建一个
if not os.path.isdir(logfile_dir):  # C:\Users\oldboy\Desktop\atm\log
    os.mkdir(logfile_dir)

# log文件的全路径
logfile_path = os.path.join(logfile_dir, logfile_name)  # C:\Users\oldboy\Desktop\atm\log\log.log

if os.path.getsize(logfile_path) > 4000:
    pass

# 定义日志路径 结束

# log配置字典 (不能改)
LOGGING_DIC = {
    'version': 1,
    'disable_existing_loggers': False,
    # 配日志格式
    'formatters': {
        'standard': {
            'format': standard_format
        },
        'simple': {
            'format': simple_format
        },
    },
    'filters': {},  # filter可以不定义
    # 配置打印位置
    'handlers': {
        # 打印到终端的日志
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',  # 打印到屏幕
            'formatter': 'simple'
        },
        # 打印到文件的日志,收集info及以上的日志
        'default': {
            'level': 'INFO',
            'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件
            'formatter': 'standard',
            'filename': logfile_path,  # 日志文件
            'maxBytes': 1024 * 1024 * 5,  # 日志大小 5M  (*****)
            'backupCount': 5,
            'encoding': 'utf-8',  # 日志文件的编码,再也不用担心中文log乱码了
        },
    },
    'loggers': {
        # logging.getLogger(__name__)拿到的logger配置。如果''设置为固定值logger1,则下次导入必须设置成logging.getLogger('logger1')
        '': {
            # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
            'handlers': ['default', 'console'],
            'level': 'DEBUG',
            'propagate': False,  # 向上(更高level的logger)传递
        },
    },
}


def load_my_logging_cfg():
    logging.config.dictConfig(LOGGING_DIC)  # 导入上面定义的logging配置
    logger = logging.getLogger(__name__)  # 生成一个log实例
    logger.info('It works!')  # 记录该文件的运行状态

    return logger


if __name__ == '__main__':#此处是自己加的
    load_my_logging_cfg()
    

추천

출처www.cnblogs.com/ghylpb/p/11600472.html