一    os模块

那么作为一个常用模块,os模块是与操作系统交互的一个模块。

那么os模块中我们常用的一般有以下几种:

  1. os.listdir('dirname') 以列表的形式列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
  2. os.path.abspath(path) 返回path规范化的绝对路径
  3. os.path.split(path) path分割成目录和文件名二元组返回
  4. os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素
  5. os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
  6. os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False
  7. os.path.isabs(path) 如果path是绝对路径,返回True
  8. os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False
  9. os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False
  10. os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
  11. os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间
  12. os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
  13. os.path.getsize(path) 返回path的大小

还有一些不常用的:

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

那么我们引用os模块,主要就是方便我们对不同的文件,通过路径来找到他们

  1. os路径处理
  2. #方式一:推荐使用
  3. import os
  4. #具体应用
  5. import os,sys
  6. possible_topdir = os.path.normpath(os.path.join(
  7. os.path.abspath(__file__),
  8. os.pardir, #上一级
  9. os.pardir,
  10. os.pardir
  11. ))
  12. sys.path.insert(,possible_topdir)
  13.  
  14. #方式二:不推荐使用
  15. os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

二    json与pickle模块

这个模块主要对文件进行序列化与反序列化

那么什么叫序列化与反序列化:

序列化:我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling。

序列化的用途:

详细介绍序列化两个主要用途

使用json进行序列化操作:

如果我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如XML,但更好的方法是序列化为JSON,因为JSON表示出来就是一个字符串,可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输。JSON不仅是标准格式,并且比XML更快,而且可以直接在Web页面中读取,非常方便。JSON表示的对象就是标准的JavaScript语言的对象,JSON和Python内置的数据类型对应如下:

  1. import json
  2.  
  3. dic={'name':'alvin','age':,'sex':'male'}
  4. print(type(dic))#<class 'dict'>
  5.  
  6. j=json.dumps(dic)
  7. print(type(j))#<class 'str'>
  8.  
  9. f=open('序列化对象','w')
  10. f.write(j) #-------------------等价于json.dump(dic,f)
  11. f.close()
  12. #-----------------------------反序列化<br>
  13. import json
  14. f=open('序列化对象')
  15. data=json.loads(f.read())# 等价于data=json.load(f)
  16. 复制代码
  17.  
  18. 复制代码
  19. import json
  20. #dct="{'1':111}"#json 不认单引号
  21. #dct=str({"":})#报错,因为生成的数据还是单引号:{'one': }
  22.  
  23. dct='{"1":"111"}'
  24. print(json.loads(dct))
  25.  
  26. #conclusion:
  27. # 无论数据是怎样创建的,只要满足json格式,就可以json.loads出来,不一定非要dumps的数据才能loads

json使用以及注意事项

使用pickle进行序列化:

Pickle的问题和所有其他编程语言特有的序列化问题一样,就是它只能用于Python,并且可能不同版本的Python彼此都不兼容,因此,只能用Pickle保存那些不重要的数据,不能成功地反序列化也没关系。

那么从上面两个图我们可以看出,json在进行序列化与反序列化操作时与pickle的区别:

在将内存中的结构化的数据保存到文件的时候,他们所转化的形式是不同的,json转化成str,而pickl转化成bytes。同时json的跨平台性更好,pickl只适用于python自己使用。但是json并不能将所有的格式都进行序列化存储。

三    logging模块

1   logging模块分为五个日志级别:

  1. CRITICAL = #FATAL = CRITICAL
  2. ERROR =
  3. WARNING = # 默认级别为worning,打印到终端
  4. INFO =
  5. DEBUG =
  6. NOTSET = #不设置

2    为logging模块指定全局配置,针对所有logger有效,控制打印到文件中:

  1. 可在logging.basicConfig()函数中通过具体参数来更改logging模块默认行为,可用参数有
  2. filename:用指定的文件名创建FiledHandler(后边会具体讲解handler的概念),这样日志会被存储在指定的文件中。
  3. filemode:文件打开方式,在指定了filename时使用这个参数,默认值为“a”还可指定为“w”。
  4. format:指定handler使用的日志显示格式。
  5. datefmt:指定日期时间格式。
  6. level:设置rootlogger(后边会讲解具体概念)的日志级别
  7. stream:用指定的stream创建StreamHandler。可以指定输出到sys.stderr,sys.stdout或者文件,默认为sys.stderr。若同时列出了filenamestream两个参数,则stream参数会被忽略。
  8.  
  9. #格式
  10. %(name)sLogger的名字,并非用户名,详细查看
  11.  
  12. %(levelno)s:数字形式的日志级别
  13.  
  14. %(levelname)s:文本形式的日志级别
  15.  
  16. %(pathname)s:调用日志输出函数的模块的完整路径名,可能没有
  17.  
  18. %(filename)s:调用日志输出函数的模块的文件名
  19.  
  20. %(module)s:调用日志输出函数的模块名
  21.  
  22. %(funcName)s:调用日志输出函数的函数名
  23.  
  24. %(lineno)d:调用日志输出函数的语句所在的代码行
  25.  
  26. %(created)f:当前时间,用UNIX标准的表示时间的浮 点数表示
  27.  
  28. %(relativeCreated)d:输出日志信息时的,自Logger创建以 来的毫秒数
  29.  
  30. %(asctime)s:字符串形式的当前时间。默认格式是 “-- ::,”。逗号后面的是毫秒
  31.  
  32. %(thread)d:线程ID。可能没有
  33.  
  34. %(threadName)s:线程名。可能没有
  35.  
  36. %(process)d:进程ID。可能没有
  37.  
  38. %(message)s:用户输出的消息
  39.  
  40. 复制代码
  41.  
  42. 复制代码
  43. #======介绍
  44. 可在logging.basicConfig()函数中可通过具体参数来更改logging模块默认行为,可用参数有
  45. filename:用指定的文件名创建FiledHandler(后边会具体讲解handler的概念),这样日志会被存储在指定的文件中。
  46. filemode:文件打开方式,在指定了filename时使用这个参数,默认值为“a”还可指定为“w”。
  47. format:指定handler使用的日志显示格式。
  48. datefmt:指定日期时间格式。
  49. level:设置rootlogger(后边会讲解具体概念)的日志级别
  50. stream:用指定的stream创建StreamHandler。可以指定输出到sys.stderr,sys.stdout或者文件,默认为sys.stderr。若同时列出了filenamestream两个参数,则stream参数会被忽略。
  51.  
  52. format参数中可能用到的格式化串:
  53. %(name)s Logger的名字
  54. %(levelno)s 数字形式的日志级别
  55. %(levelname)s 文本形式的日志级别
  56. %(pathname)s 调用日志输出函数的模块的完整路径名,可能没有
  57. %(filename)s 调用日志输出函数的模块的文件名
  58. %(module)s 调用日志输出函数的模块名
  59. %(funcName)s 调用日志输出函数的函数名
  60. %(lineno)d 调用日志输出函数的语句所在的代码行
  61. %(created)f 当前时间,用UNIX标准的表示时间的浮 点数表示
  62. %(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数
  63. %(asctime)s 字符串形式的当前时间。默认格式是 “-- ::,”。逗号后面的是毫秒
  64. %(thread)d 线程ID。可能没有
  65. %(threadName)s 线程名。可能没有
  66. %(process)d 进程ID。可能没有
  67. %(message)s用户输出的消息
  68.  
  69. #========使用
  70. import logging
  71. logging.basicConfig(filename='access.log',
  72. format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
  73. datefmt='%Y-%m-%d %H:%M:%S %p',
  74. level=)
  75.  
  76. logging.debug('调试debug')
  77. logging.info('消息info')
  78. logging.warning('警告warn')
  79. logging.error('错误error')
  80. logging.critical('严重critical')
  81.  
  82. #========结果
  83. access.log内容:
  84. -- :: PM - root - DEBUG -test: 调试debug
  85. -- :: PM - root - INFO -test: 消息info
  86. -- :: PM - root - WARNING -test: 警告warn
  87. -- :: PM - root - ERROR -test: 错误error
  88. -- :: PM - root - CRITICAL -test: 严重critical
  89.  
  90. part2: 可以为logging模块指定模块级的配置,即所有logger的配置

3  logger的应用:

  1. """
  2. logging配置
  3. """
  4.  
  5. import os
  6. import logging.config
  7.  
  8. # 定义三种日志输出格式 开始
  9.  
  10. standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \
  11. '[%(levelname)s][%(message)s]' #其中name为getlogger指定的名字
  12.  
  13. simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
  14.  
  15. id_simple_format = '[%(levelname)s][%(asctime)s] %(message)s'
  16.  
  17. # 定义日志输出格式 结束
  18.  
  19. logfile_dir = os.path.dirname(os.path.abspath(__file__)) # log文件的目录
  20.  
  21. logfile_name = 'all2.log' # log文件名
  22.  
  23. # 如果不存在定义的日志目录就创建一个
  24. if not os.path.isdir(logfile_dir):
  25. os.mkdir(logfile_dir)
  26.  
  27. # log文件的全路径
  28. logfile_path = os.path.join(logfile_dir, logfile_name)
  29.  
  30. # log配置字典
  31. LOGGING_DIC = {
  32. 'version': ,
  33. 'disable_existing_loggers': False,
  34. 'formatters': {
  35. 'standard': {
  36. 'format': standard_format
  37. },
  38. 'simple': {
  39. 'format': simple_format
  40. },
  41. },
  42. 'filters': {},
  43. 'handlers': {
  44. #打印到终端的日志
  45. 'console': {
  46. 'level': 'DEBUG',
  47. 'class': 'logging.StreamHandler', # 打印到屏幕
  48. 'formatter': 'simple'
  49. },
  50. #打印到文件的日志,收集info及以上的日志
  51. 'default': {
  52. 'level': 'DEBUG',
  53. 'class': 'logging.handlers.RotatingFileHandler', # 保存到文件
  54. 'formatter': 'standard',
  55. 'filename': logfile_path, # 日志文件
  56. 'maxBytes': **, # 日志大小 5M
  57. 'backupCount': ,
  58. 'encoding': 'utf-8', # 日志文件的编码,再也不用担心中文log乱码了
  59. },
  60. },
  61. 'loggers': {
  62. #logging.getLogger(__name__)拿到的logger配置
  63. '': {
  64. 'handlers': ['default', 'console'], # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
  65. 'level': 'DEBUG',
  66. 'propagate': True, # 向上(更高level的logger)传递
  67. },
  68. },
  69. }
  70.  
  71. def load_my_logging_cfg():
  72. logging.config.dictConfig(LOGGING_DIC) # 导入上面定义的logging配置
  73. logger = logging.getLogger(__name__) # 生成一个log实例
  74. logger.info('It works!') # 记录该文件的运行状态
  75.  
  76. if __name__ == '__main__':
  77. load_my_logging_cfg()
  78.  
  79. logging配置文件
  1.  

常用模块:os模块,logging模块等的更多相关文章

  1. Python常用模块os & sys & shutil模块

    OS模块 import os ''' os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录: ...

  2. 模块和包,logging模块

    模块和包,logging日志 1.模块和包 什么是包? 只要文件夹下含有__init__.py文件就是一个包. 假设文件夹下有如下结构 bake ├── test.py ├── __init__.py ...

  3. Python模块:日志输出—logging模块

    1. logging介绍 Python的logging模块提供了通用的日志系统,可以方便第三方模块或者是应用使用.这个模块提供不同的日志级别,并可以采用不同的方式记录日志,比如文件,HTTP GET/ ...

  4. Day5模块-os和sys模块

    os模块:操作系统调用的接口 ------------------------------------------------------------------------------------- ...

  5. python3之xml&ConfigParser&hashlib&Subprocess&logging模块

    1.xml模块 XML 指可扩展标记语言(eXtensible Markup Language),标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言. XML 被设计用来传输和存储 ...

  6. 第二十三篇 logging模块(******)

    日志非常重要,而且非常常用,可以通过logging模块实现. 热身运动 import logging logging.debug("debug message") logging. ...

  7. Python logging 模块学习

    logging example Level When it's used Numeric value DEBUG Detailed information, typically of interest ...

  8. Python入门之logging模块

    本章目录: 一.logging模块简介 二.logging模块的使用 三.通过JSON或者YMAL文件配置logging模块 ===================================== ...

  9. 0x01 Python logging模块

    目录 Python logging 模块 前言 logging模块提供的特性 logging模块的设计过程 logger的继承 logger在逻辑上的继承结构 logging.basicConfig( ...

  10. 第十章、logging模块

    目录 第十章.logging模块 一.logging模块及日志框架 第十章.logging模块 一.logging模块及日志框架 导入方式 import logging 作用 写日志 模块功能 # V ...

随机推荐

  1. HDU 4585

    http://acm.hdu.edu.cn/showproblem.php?pid=4585 从原来的人中找出战斗数值最接近的,输出他们两人的序号 要在logn的复杂度完成查找,我用的是set,当然用 ...

  2. select 从应用层到内核实现解析

    在一个应用中,如果需要读取多个设备文件,这其中有多种实现方式: 1.使用一个进程,并采用同步查询机制,不停的去轮询每一个设备描述符,当设备描述符不可用时,进程睡眠. 2:使用多个进程或者线程分别读取一 ...

  3. DBWR进程

    --查询dbwr进程号 select pname,spid from v$process where pname like 'DBW%'; PNAME SPID----- -------------- ...

  4. opencv-python教程学习系列11-几何变换

    前言 opencv-python教程学习系列记录学习python-opencv过程的点滴,本文主要介绍几何变换,坚持学习,共同进步. 系列教程参照OpenCV-Python中文教程: 系统环境 系统: ...

  5. led不同颜色的驱动电压和驱动电流

    LED耗电非常低,一般来说LED的工作电压是2-3.6V,其中红光电压是1.8-2.1V 波长610-620    绿光电压是3.0-3.5V 波长520-530   兰光电压是3.0-3.5V 波长 ...

  6. Unity3D 发布APK安卓环境配置步骤、安装、教程(含Java/Android)(超全流程)

    Unity3D安卓环境配置运行 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享. ...

  7. The Alphabet Sticker

    题目大意:给你一串字符串,其中有一部分未知,用'?'表示. 现在定义一种合法的Sticker,比如"aabcc","ccccab".即所有相同的字母要在一起才是 ...

  8. (1)json和pickle序列化模块

    json 和pickle 模块 json和pickle模块下都有4个功能 dumps  <---> loads  (序列化 <--->反序列化) dump <---> ...

  9. DZY Loves Math系列

    link 好久没写数学题了,再这样下去吃枣药丸啊. 找一套应该还比较有意思的数学题来做. [bzoj3309]DZY Loves Math 简单推一下. \[\sum_{i=1}^n\sum_{j=1 ...

  10. 2、let 和 const 命令

    let 命令 块级作用域 const 命令 顶层对象的属性 global 对象 let 命令 基本用法 ES6 新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所 ...