python基础学习-常用模块的使用(扩展补充,高级使用)

一、os模块

1、常见命令

import 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.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的大小

os.listdir 获取某一个文件夹下的子文件和文件名

import os
​
print(os.listdir(r'D:\python oldboy\day22'))     # 获取该文件夹下的文件名
print(os.listdir(r'.'))                                         # 获取当前文件夹下的文件名

os.path.getsize 查看文件大小

import os
​
res = os.path.getsize(r'D:\python oldboy\day22\常用模块的使用\run.py')
print(res)
os.system('dir D:\python oldboy')     # 打印文件夹下的文件信息
os.rename('old_name', 'new_name')       # 重命名文件夹/目录

二、time模块

1、time 时间模块 时间分为三种格式: 1.时间戳:从1970年到现在 经过的秒数 作用:用于时间间隔的运算

import time
​
print(time.time())  # 1585530575.6760194
print(time.time() + 86400*3)

2.按照某种格式显示的时间:2020-03-30 11:11:11 作用:用于展示时间

import time
​
print(time.strftime('%Y-%m-%d %X'))  # 2020-03-30 09:09:35
print(time.strftime('%Y-%m-%d %H:%M:%S'))  # 2020-03-30 09:09:35
print(time.strftime('%Y-%m-%d %H:%M:%S %p'))  # 2020-03-30 09:09:35 AM

3.结构化时间 作用:用于单独获取时间的某一部分

import time
 #--------------------------我们先以当前时间为准,让大家快速认识三种形式的时间
 print(time.time()) # 时间戳:1487130156.419527
 print(time.strftime("%Y-%m-%d %X")) #格式化的时间字符串:'2017-02-15 11:40:53'
print(time.localtime()) #本地时区的struct_time
 print(time.gmtime())    #UTC时区的struct_time

2、datetime

import datetime
​
print(datetime.datetime.now())  # 显示当前时间:2020-03-30 09:25:13.923937
print(datetime.datetime.now() + datetime.timedelta(days=3)) # 计算3天后的时间:2020-04-02 09:25:13.923937
print(datetime.datetime.now() + datetime.timedelta(weeks=1)) # 计算1周后的时间:2020-04-06 09:26:35.199914

三、random模块

1、基础

import random
​
print(random.random())                         # (1,3)--float 大于0 小于1 的小数
print(random.randint(1,3))                      # [1,3] 开区间 大于等于1 小于等于3 的整数
print(random.randrange(1,3))                    # [1,3) 大于等于1 小于3 的整数
print(random.choice([1,'a',[4,5]]))             # 1 或者 ‘a’ 或者 [4,5]
print(random.sample([111,'aaa','ccc','ddd'],2)) # 列表元素 任意2个组合
print(random.uniform(1,3))                      # 大于1 小于3 的小树
item = [1,3,5,7,9]
random.shuffle(item)    # 打乱item的顺序,相当于 “洗牌”
print(item)

四、sys模块

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

五、shutil模块

高级的 文件、文件夹、压缩包 处理模块

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') #目标文件必须存在
shutil.copystat(src, dst) #仅拷贝状态的信息,包括:mode bits, atime, mtime, flags

 shutil.copystat('f1.log', 'f2.log') #目标文件必须存在
shutil.copy(src, dst) #拷贝文件和权限

 import shutil
  
 shutil.copy('f1.log', 'f2.log')
shutil.copy2(src, dst) #拷贝文件和状态信息

 import shutil
  
 shutil.copy2('f1.log', 'f2.log')
shutil.ignore_patterns(*patterns) shutil.copytree(src, dst, symlinks=False, ignore=None) #递归的去拷贝文件夹

 import shutil
  
 shutil.copytree('folder1', 'folder2', ignore=shutil.ignore_patterns('*.pyc', 'tmp*')) #目标目录不能存在,
注意对folder2目录父级目录要有可写权限,ignore的意思是排除
shutil.rmtree(path[, ignore_errors[, onerror]]) #递归的去删除文件 import shutil shutil.rmtree('folder1') shutil.move(src, dst) #递归的去移动文件,它类似mv命令,其实就是重命名。 import shutil shutil.move('folder1', 'folder3') shutil.make_archive(base_name, format,...)

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

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

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

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

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

  • owner: 用户,默认当前用户

  • group: 组,默认当前组

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

六、以上功能案例:

6.1、文件路径

规定起始目录
# 推荐使用这种
 BASE_DIR = os.path.dirname(os.path.dirname(__file__))
#文件目录拼接
 os.path.join(BASE_DIR,‘db.txt’)
print(os.path.isfile(r'test.py'))           # 判断是否是文件:True
print(os.path.isfile(r'aaa'))               # 判断是否是文件:False

6.2、需要掌握:format string <==> time stamp

# '1998-09-30 11:11:11' + 7
format string ==> struct_time ==> timestamp

import time
import datetime
​
struct_time = time.strftime('1998-03-03 11:11:11', '%Y-%m-%d %H:%M:%S')
timestamp = time.mktime(struct_time) + 7*86400
print(timestamp)
timestamp ==> struct_time ==> format string

import time
import datetime
​
res = time.strftime('%Y-%m-%d %X',time.localtime(timestamp))
print(res)

6.3、时间格式的转换

struct_time ==> 时间戳

import time
s_time = time.localtime()
print(time.mktime(s_time))  # 1585532088.0
时间戳 ==> struct_time

import time
import datetime
​
tp_time = time.time()
print(time.localtime(tp_time))  # time.struct_time(tm_year=2020, tm_mon=3, tm_mday=30, tm_hour=9, 
tm_min=34, tm_sec=48, tm_wday=0, tm_yday=90, tm_isdst=0)
import time import datetime ​ print(time.localtime()) # 上海时区(东八区) print(time.gmtime()) # 世界标准时间 print(time.localtime(333333)) # 时间戳,输入几秒,北京时间 print(time.gmtime(333333)) # 时间戳,输入几秒,世界标准时间

6.4、random应用:随机验证码

思路:
import random
res = ''
for i in range(6):
  随机字符 = random.choice([从26个小写字母中随机抽取出一个,从10个数字中随机取出一个])
  从26个字母中随机抽取出一个 = chr(random.randint(65,90))
  从10个数字中随机取出一个 = str(random.randint(0,9))

  随机字符 = random.choice([从26个字母中随机抽取出一个,从10个数字中随机取出一个])
  res += 随机字符

实现代码:

1.普通版:4位(大写字母+数字)

def make_code(size=4):  # 默认长度为4
    import random
    res = ''
    for i in range(size):
        s1 = chr(random.randint(65,90))     # ASCII码表中,65-90是A-Z
        s2 = str(random.randint(0,9))       # 随机整数0-9
​
        res += random.choice([s1,s2])
    return res
​
print(make_code())

2.升级版:6位(+小写字母+大写字母+数字)

def make_code_plus(size=6):  # 默认长度为6
    import random
    res = ''
    for i in range(size):
        s1 = chr(random.randint(65,90))     # ASCII码表中,65-90是A-Z
        s2 = chr(random.randint(97,122))     # ASCII码表中,97-122是a-z
        s3 = str(random.randint(0,9))       # 随机整数0-9
​
        res += random.choice([s1,s2,s3])
    return res
​
print(make_code_plus())

6.5、文件拷贝的原始方法

src_file = input('原文件路径:').strip()
dst_file = input('新文件路径:').strip()
​
with open(r'%s'%src_file, mode='rb') as read_f,\
    open(r'%s'%dst_file, mode='wb') as write_f:
    for line in read_f:
        write_f.write(line)

6.6、文件拷贝的新方法

src_file = sys.argv[1]
dst_file = sys.argv[2]
​
with open(r'%s'%src_file, mode='rb') as read_f,\
    open(r'%s'%dst_file, mode='wb') as write_f:
    for line in read_f:
        write_f.write(line)
# 在run.py所在的文件夹下,按住shift,右键,选择“在此处打开power shell”,输入
# 格式:python3 run.py 原文件路径 新文件路径
# python3 run.py D:\1.docx D:\2.docx   #拷贝成功

6.7、进阶打印进度条

import time
​
def progress(percent):
    if percent > 1:
        percent = 1
    res = int(50 * percent) * '>'
    print('\r [%-50s] %d%%' % (res,percent*100), end='')
​
recv_size = 0
total_size = 25600while recv_size < total_size:
    # 模拟网速
    time.sleep(0.2)
     # 下载了1024个字节的数据
    recv_size += 1024
    percent = recv_size / total_size    # 1024 / 25600
    # 打印进度条
    progress(percent)
 

猜你喜欢

转载自www.cnblogs.com/dingbei/p/12602169.html