十五、shutil模块

====================================================================

shutil模块是python为我们封装的一个高级的高级的文件、文件夹、压缩包 处理模块,它本质上是调用open方法对文件进行读写。模块相对比较简单,记住几个常用的方法即可。

shutil.copyfileobj(fsrc, fdst[, length])
将文件内容拷贝到另一个文件中。这个是基本方法,其他的拷贝方法都是在后台调用这个方法。 

import shutil

shutil.copyfileobj(open('old.xml','r'), open('new.xml', 'w'))

shutil.copyfile(src, dst)
拷贝文件 

shutil.copyfile('f1.log', 'f2.log')

shutil.copymode(src, dst)
仅拷贝权限。内容、组、用户均不变 

shutil.copymode('f1.log', 'f2.log')

4、shutil.copystat(src, dst)
仅拷贝状态的信息,包括:mode bits, atime, mtime, flags

shutil.copystat('f1.log', 'f2.log')

5、 shutil.copy(src, dst)
拷贝文件和权限

shutil.copy('f1.log', 'f2.log')

6、shutil.copy2(src, dst)
拷贝文件和状态信息

shutil.copy2('f1.log', 'f2.log')

7、shutil.ignore_patterns(*patterns)

shutil.copytree(src, dst, symlinks=False, ignore=None)
递归的去拷贝文件夹。ignor_patterns是指忽略不拷贝的文件

shutil.copytree('folder1', 'folder2', ignore=shutil.ignore_patterns('*.pyc', 'tmp*'))

8、shutil.rmtree(path[, ignore_errors[, onerror]])
递归的去删除文件

shutil.rmtree('folder1')

9、shutil.move(src, dst)
递归的去移动文件,它类似mv命令,其实就是重命名。 

shutil.move('folder1', 'folder3')

10、shutil.make_archive(base_name, format,...)

创建压缩包并返回文件路径,例如:zip、tar

创建压缩包并返回文件路径,例如:zip、tar

       ● base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,
如:www                        =>保存至当前路径
如:/Users/wupeiqi/www =>保存至/Users/wupeiqi/

        ● format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”

       ●  root_dir: 要压缩的文件夹路径(默认当前目录)

        ● owner: 用户,默认当前用户

       ●  group: 组,默认当前组

       ● logger: 用于记录日志,通常是logging.Logger对象

#将 /Users/wupeiqi/Downloads/test 下的文件打包放置当前程序目录

import shutil

ret = shutil.make_archive("wwwwwwwwww", 'gztar', root_dir='/Users/wupeiqi/Downloads/test')

#将 /Users/wupeiqi/Downloads/test 下的文件打包放置 /Users/wupeiqi/目录

import shutil

ret = shutil.make_archive("/Users/wupeiqi/wwwwwwwwww", 'gztar', root_dir='/Users/wupeiqi/Downloads/test')

shutil 对压缩包的处理本质上是调用 ZipFile 和 TarFile 两个模块来进行的,但封装的比较简单,不是很好用,建议还是使用ZipFile 和 TarFile 模块。

 

十六、zipfile模块

==========================================================

当你需要压缩文件的时候,使用这个模块会比较方便。

import zipfile

# 压缩

z = zipfile.ZipFile('laxi.zip', 'w')

z.write('a.log')

z.write('data.data')             # 可以一个一个添加文件进压缩包

z.close()

# 解压

z = zipfile.ZipFile('laxi.zip', 'r')

z.extractall()                              # 这是一次性将压缩包内的文件全部解压出来

z.close()

要单独解压压缩包内的某个文件就需要先获得压缩包内的文件名列表。zipfile提供了一个namelist方法。

import zipfile

z = zipfile.ZipFile('laxi.zip', 'r')

ret = z.namelist()

print(ret)

z.close()

运行结果:

['testfile.bak', 'testfile.dat']

然后通过具体的文件名去解压某个文件。zipfile提供了extract方法。

import zipfile

z = zipfile.ZipFile('laxi.zip', 'r')

z.extract("testfile.bak")

z.close()

 

十七、getpass模块

===============================================================

getpass模块非常简单,它能够让你在输入密码的时候不会在屏幕上显示密码,安全性更高。注意:在pycharm环境里这个模块用不了!

getpass模块只有2个常用方法:getpass和getuser。参考下面的例子:

import getpass

pwd = getpass.getpass("请输入密码: ")  # 可代替input方法,接收用户输入的密码

print(getpass.getuser())  # getuser方法会返回当前执行程序的用户名

 

 

十八、bisect模块

===================================================================

这是一个python内置的二分查找法模块,模块内只有4个方法:bisect_right、bisect_left、insort_right和insort_left。然后通过将bisect_right赋值给bisect,将insort_right赋值给insort实现向后兼容。实际使用中,是需要记住bisect和insort两个方法即可。

bisect模块的使用方法通常是:bisect.bisect(list,x),其中x表示要查找的值,list是一个默认已经排好序的列表。

bisect():返回值是x在列表中应处的位置下标,并不修改列表本身。

import bisect

x = 200

list1 = [1, 3, 6, 24, 55, 78, 454, 555, 1234, 6900]

ret = bisect.bisect(list1, x)

print("返回值: ", ret)

print("list1 = ", list1)

运行结果:

返回值:  6

list1 =  [1, 3, 6, 24, 55, 78, 454, 555, 1234, 6900]

insort():返回值是None,但是会将x插入到列表中生成新的列表。x插在它的大小排序所在位置。

import bisect

x = 200

list1 = [1, 3, 6, 24, 55, 78, 454, 555, 1234, 6900]

ret = bisect.insort(list1, x)

print("返回值: ", ret)

print("list1 = ", list1)

运行结果:

返回值:  None

list1 =  [1, 3, 6, 24, 55, 78, 200, 454, 555, 1234, 6900]

十九、fileinput模块

===========================================================================

使用过python内置的open方法处理文件的同学都知道,它没有直接修改文件内容的方法。这个fileinput可以帮助我们轻松的实现文件内容的修改功能。fileinput模块中的重要方法如下:

input([files[, inplace[, backup]])

  最重要的方法,用于遍历打开的文件,inplace为True的时候,会将修改写入文件,backup为True的时候会进行备份操作。

filename()

  返回当前文件的名字

lineno()

  返回当前(累计)的行数。同时处理多个文件时,行数会累计。

filelineno()

  返回当前文件的总行数。处理新文件时,行数会重置为1,重新计数。

isfirstline()

  检查当前行是否是文件的第一行

isstdin()

  检查最后一行是否来自sys.stdin

nextfile()

  关闭当前文件,移动到下一个文件(fileinput是可以同时处理多个文件的!)

close() 

  关闭整个文件链,结束迭代。

为了演示fileinput的使用,假设编写了如下的一个脚本,想要为其代码进行编号。为了让脚本在进行代码编号后仍然能够正常运行,我们只能在每一行的右侧加上#来注释行号。其中,我们假定每个代码行最多有40个字符。具体代码如下:

import fileinput

f = fileinput.input(inplace=True)

for line in f:

line = line.rstrip()

num = fileinput.lineno()

print("%-40s # %2i" % (line, num))

f.close()

  注意,只能使用rstrip,不能直接用strip,那样会把左边的缩进也给去掉了。

请在终端环境下,使用python fileinput_test.py fileinput_test.py的方式执行程序,结果如下:

import fileinput                         #  1

#  2

f = fileinput.input(inplace=True)        #  3

for line in f:                           #  4

line = line.rstrip()                 #  5

num = fileinput.lineno()             #  6

print("%-40s # %2i" % (line, num))   #  7

f.close()                                #  8

要小心使用inplace参数,它会修改文件。应该在不适用inplace设置的情况下仔细测试自己的程序(这样只会打印出结果),在确保程序工作正常后再修改文件。

二十、logging模块

===========================================================================

python同样提供logging日志记录模块,以下是logging模块配置参数

logging.basicConfig()函数中可通过具体参数来更改logging模块默认行为,可用参数有:

filename:用指定的文件名创建FiledHandler,这样日志会被存储在指定的文件中。

filemode:文件打开方式,在指定了filename时使用这个参数,默认值为“a”还可指定为“w”。

format:指定handler使用的日志显示格式。

datefmt:指定日期时间格式。

level:设置rootlogger(后边会讲解具体概念)的日志级别

stream:用指定的stream创建StreamHandler。可以指定输出到sys.stderr,sys.stdout或者文件(f=open(‘test.log’,’w’)),默认为sys.stderr。若同时列出了filename和stream两个参数,则stream参数会被忽略。

format参数中可能用到的格式化串:

%(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用户输出的消息

logging简单测试

import logging

logging.debug('debug message')

logging.info('info message')

logging.warning('warning message')

logging.error('error message')

logging.critical('critical message'

默认情况下Python的logging模块将日志打印到了标准输出中,且只显示了大于等于WARNING级别的日志,这说明默认的日志级别设置为WARNING(日志级别等级CRITICAL > ERROR > WARNING > INFO > DEBUG),默认的日志格式为日志级别:Logger名称:用户输出消息。

logging自定义格式输出

import logging

logging.basicConfig(level=logging.DEBUG,

format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',

datefmt='%a, %d %b %Y %H:%M:%S',

filename='test.log',

filemode='w')

logging.debug('debug message')

logging.info('info message')

logging.warning('warning message')

logging.error('error message')

logging.critical('critical message')

生成test.log文件,内容如下

logging对象配置

import logging

logger = logging.getLogger()

# 创建一个handler,用于写入日志文件

fh = logging.FileHandler('test.log',encoding='utf-8')

# 再创建一个handler,用于输出到控制台

ch = logging.StreamHandler()

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

fh.setLevel(logging.DEBUG)

fh.setFormatter(formatter)

ch.setFormatter(formatter)

logger.addHandler(fh) #logger对象可以添加多个fh和ch对象

logger.addHandler(ch)

logger.debug('logger debug message')

logger.info('logger info message')

logger.warning('logger warning message')

logger.error('logger error message')

logger.critical('logger critical message')

logging库提供了多个组件:Logger、Handler、Filter、Formatter。Logger对象提供应用程序可直接使用的接口,Handler发送日志到适当的目的地,Filter提供了过滤日志信息的方法,Formatter指定日志显示格式。另外,可以通过:logger.setLevel(logging.Debug)设置级别,当然,也可以通过

fh.setLevel(logging.Debug)单对文件流设置某个级别。

 

python内置模块2的更多相关文章

  1. python内置模块(4)

    这一部分是python内置模块系列的最后一部分,介绍了一些小巧有用的内置模块. 目录: 1.random 2.shelve 3.getpass 4.zipfile 5.tarfile 6.bisect ...

  2. Python学习笔记【第八篇】:Python内置模块

    什么时模块 Python中的模块其实就是XXX.py 文件 模块分类 Python内置模块(标准库) 自定义模块 第三方模块 使用方法 import 模块名 form 模块名 import 方法名 说 ...

  3. Python内置模块与标准库

    Python内置模块就是标准库(模块)吗?或者说Python的自带string模块是内置模块吗? 答案是:string不是内置模块,它是标准库.也就是说Python内置模块和标准库并不是同一种东西. ...

  4. python内置模块[re]

    python内置模块[re] re模块: python的re模块(Regular Expression正则表达式)提供各种正则表达式的匹配操作,在文本解析.复杂字符串分析和信息提取时是一个非常有用的工 ...

  5. python内置模块[sys,os,os.path,stat]

    python内置模块[sys,os,os.path,stat] 内置模块是python自带功能,在使用内置模块时,需要遵循 先导入在 使用 一.sys 对象 描述 sys.argv 命令行参数获取,返 ...

  6. Python内置模块和第三方模块

    1.Python内置模块和第三方模块 内置模块: Python中,安装好了Python后,本身就带有的库,就叫做Python的内置的库. 内置模块,也被称为Python的标准库. Python 2.x ...

  7. python内置模块collections介绍

    目录 python内置模块collections介绍 1.namedtuple 2.deque 3.defaultdict 4.OrderedDict 5.ChainMap 6.Counter 7.小 ...

  8. python内置模块介绍(一)

     本文主要介绍模块列表如下: os sys re time datetime random shutil subprocess os模块 os.getcwd()                    ...

  9. python内置模块(time模块)

    常用的python内置模块 一.time模块 在python的三种时间表现形式: 1.时间戳,给电脑看的. - 自1970-01-01 00:00:00到当前时间,按秒计算,计算了多少秒. impor ...

  10. python 内置模块续(二)

    目录 python 内置模块补充 1.hashlib模块 简易使用: 高级使用: 进阶使用: 加盐处理: 校验文件一致性 2.logging日志模块 日志等级 常用处理 "四大天王" ...

随机推荐

  1. MVC学习笔记(四)---使用linq多表联查(SQL)

    1.数据库原型(Students表中的ID和Scores表中的StudentID是对应的) 2.实现效果:查询出每个学生各个科目的成绩(用的是MVC学习笔记(三)—用EF向数据库中添加数据的架构) C ...

  2. 十二.作业难点(有IT大牛路过的可以帮我解答我的疑问?万分感谢)--转行的苦逼人

    今天开始改变写博客风格,其他不多说. 今天题目如下: # 7.写函数,完成以下功能: (8分) # 例如有: # user_list=[ # {"name": "alex ...

  3. tf常见的损失函数(LOSS)汇总

    损失函数在机器学习中用于表示预测值与真实值之间的差距.一般而言,大多数机器学习模型都会通过一定的优化器来减小损失函数从而达到优化预测机器学习模型参数的目的. 哦豁,损失函数这么必要,那都存在什么损失函 ...

  4. SpringBoot上传文件报错,临时路径不存在

    异常信息 报错日志: The temporary upload location [/tmp/tomcat.7957874575370093230.8088/work/Tomcat/localhost ...

  5. 【DATAGUARD】物理dg在主库丢失归档文件的情况下的恢复(七)

    [DATAGUARD]物理dg在主库丢失归档文件的情况下的恢复(七) 一.1  BLOG文档结构图 一.2  前言部分 一.2.1  导读 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到 ...

  6. 基于 K8S 集群安装部署 istio-1.2.4

    使用云平台可以为组织提供丰富的好处.然而,不可否认的是,采用云可能会给 DevOps 团队带来压力.开发人员必须使用微服务以满足应用的可移植性,同时运营商管理了极其庞大的混合和多云部署.Istio 允 ...

  7. vue echarts中绑定的click函数无法引用vue实例data里面的数据

    在使用echarts的时候,需要在触发click事件之后去修改实例data里面的数据,可是发现用this引用后总是出现undefined, 解决办法: myChart.on('click', (par ...

  8. H3C 802.11 MAC层工作原理

  9. springboot+mybatis +yml文件配置多数据源

    记录一下java开发中多数据源的配置过程, 参考博客:https://blog.csdn.net/weinichendian/article/details/72903757,我在这里进行了整理,使用 ...

  10. Node.js GET/POST对应的url/query-string常用的方法介绍

    <一>,在学node.js--GET/POST请求时,先看模块url和query-string的用法 1. 模块url用法,一般用于解析get请求. parse: [Function: u ...