python常用模块

python常用模块之一

time模块****

在Python中,通常有这几种方式来表示时间:

  • 时间戳(timestamp) :         通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。
  • 格式化的时间字符串         2018-05-20 19:45:04

元组(struct_time)   :         struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时)

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 18-5-19 下午3:26
# @Author  : LK
# @File    : time_modular.py
# @Software: PyCharm

import time
#   时间戳  计算
print(time.time())  #   从1970 年到现在有多少秒

#  结构化时间
# time.struct_time(tm_year=2018, tm_mon=5, tm_mday=19,
# tm_hour=15, tm_min=32, tm_sec=0, tm_wday=5, tm_yday=139, tm_isdst=0)
print(time.localtime())
t = time.localtime()
print(t.tm_year)    # 2018

#   结构化时间 转换成时间戳  看图
print(time.mktime(time.localtime(123213)))

#   将结构化时间转换当成字符串时间  2018-05-19 15:40:38
print(time.strftime('%Y-%m-%d %X',time.localtime()))

#   将字符串时间装换成结构化时间
# time.struct_time(tm_year=2018, tm_mon=5, tm_mday=19,
# tm_hour=15, tm_min=40, tm_sec=38, tm_wday=5, tm_yday=139, tm_isdst=-1)
print(time.strptime('2018:05:19:15:40:38', "%Y:%m:%d:%X"))

#   Sat May 19 15:46:22 2018
print(time.asctime())
print(time.ctime())

import datetime
# 2018-05-19 15:48:08.429398
print(datetime.datetime.now())

时间类型的相互转换

    

datetime模块****

可以用来做时间的计算

print(datetime.datetime.now()) #返回 2016-08-19 12:47:03.941925
print(datetime.date.fromtimestamp(time.time()) )  # 时间戳直接转成日期格式 2016-08-19
print(datetime.datetime.now() )
print(datetime.datetime.now() + datetime.timedelta(3)) #当前时间+3天
print(datetime.datetime.now() + datetime.timedelta(-3)) #当前时间-3天
print(datetime.datetime.now() + datetime.timedelta(hours=3)) #当前时间+3小时
print(datetime.datetime.now() + datetime.timedelta(minutes=30)) #当前时间+30分

random模块***

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 18-5-19 下午3:51
# @Author  : LK
# @File    : 随机模块.py
# @Software: PyCharm

import random

print(random.randint(0, 9)) #   0到9随机产生一个数
print(random.random())     # 0-1 float
print(random.randrange(1, 3)) # [1, 3)
print(chr(random.randint(65, 122)))  # 产生一个随机字母
print(random.choice([1, '23', [4, 5]]))  # 在这个列表里面随机选
print(random.sample([1, '23', [4, 5]], 2))  # 选择两个随机组合

# # 将a转换成ascii ord('a')
# print(ord('a')) 翻过来chr(数字)
random
#   产生一个4位数字和字母的含有字母的验证码
res = ''
for i in range(1,5):
    t = random.randint(0, 9)
    s = chr(random.randint(65,90))
    s2 = chr(random.randint(97, 122))
    res += str(random.choice([t,s, s2]))
print(res)
验证码

os模块****

os是一个提供和系统交互的模块

#   字符串拼接尽量不用+ 用join, 因为+所占内存是+前和后的
import os

os.getcwd() # 获取当前工作目录,即当前python脚本工作的目录路径
print(os.getcwd())
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下为"	
",Linux下为"
"
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.join(path1[, path2[, ...]])    #将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
os.path.getatime(path)    #返回path所指向的文件或者目录的最后存取时间
os.path.getmtime(path)    #返回path所指向的文件或者目录的最后修改时间
 os.path.getmtime(path)  #返回path所指向的文件或者目录的最后修改时间
os方法
import os
path = os.path.abspath(__file__)
path2 = os.path.dirname(__file__)
path3 = os.path.dirname(os.path.abspath(__file__))
path4 = os.path.split(path3)[0]
path5 = os.path.join(path4, "test/ogf", "inog")
print(path)
print(path2)
print(path3)
print(path4)
print(path5)

结果:
/home/lk/Desktop/py_project/chapt16/bin/python /home/lk/Desktop/pro_py/模块/model/os_modular.py
/home/lk/Desktop/pro_py/模块/model/os_modular.py
/home/lk/Desktop/pro_py/模块/model
/home/lk/Desktop/pro_py/模块/model
/home/lk/Desktop/pro_py/模块
/home/lk/Desktop/pro_py/模块/test/ogf/inog
简单应用
#   在win下会把c:/windows\system32\  -->c:\windows\system32\
os.path.normcase('c:/windows\system32\')
# 'c:\windows\system32\'

# 规范化路径,如..和 /
os.path.normpath('c://windows\System32\../Temp/')
#'c:\windows\Temp'

#   在linux下会---->/ Users / jieli / test1
a = '/Users/jieli/test1/\a1/\\aa.py/../..'
print(os.path.normpath(a))
# / Users / jieli / test1
路径规范化
os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
路径处理

sys模块****

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

关于argv函数

直接看效果图

常用在 登录,就像mysql的登录 mysql -u root -p .....  会把参数自动传给argv然后 在对argv操作,就不用让用户一步一步的输入了

  # 进度条,
import time
for i in range(80):
    sys.stdout.write('#')    #  print的底层实现就是利用的这个
    time.sleep(0.1)
    sys.stdout.flush()
#
# sys.stdout.write('#')  向屏幕输出内容, 但是要等到缓存完成后,一次性打印
# sys.stdout.flush()   刷新缓存, 就是如果有内容就输出
low版进度条
#=========知识储备==========
#进度条的效果
[#             ]
[##            ]
[###           ]
[####          ]

#指定宽度
print('[%-15s]' %'#')
print('[%-15s]' %'##')
print('[%-15s]' %'###')
print('[%-15s]' %'####')

#打印%
print('%s%%' %(100)) #第二个%号代表取消第一个%的特殊意义

#可传参来控制宽度
print('[%%-%ds]' %50) #[%-50s]
print(('[%%-%ds]' %50) %'#')
print(('[%%-%ds]' %50) %'##')
print(('[%%-%ds]' %50) %'###')


#=========实现打印进度条函数==========
import sys
import time

def progress(percent,width=50):
    if percent >= 1:
        percent=1
    show_str=('[%%-%ds]' %width) %(int(width*percent)*'#')
    print('
%s %d%%' %(show_str,int(100*percent)),file=sys.stdout,flush=True,end='')


#=========应用==========
data_size=1025
recv_size=0
while recv_size < data_size:
    time.sleep(0.1) #模拟数据的传输延迟
    recv_size+=1024 #每次收1024

    percent=recv_size/data_size #接收的比例
    progress(percent,width=70) #进度条的宽度70
进度条

json和pickle模块****

json和pickle类似,就连用法都很像,就是将数据类型转换成字符串存放起来,存到文件中

pickle的类型多一点,但是他存的格式是byte类型的,所以json比较常用

#   dump/dumps是将数据转换成字符串,load/loads是将字符串转成数据类型

# pickle  和json类似,方法都一样, 就是pickle保存的数据是不是字符串而知字节, 所以读文件是用'rb', 写文件用'wb'
# #   pickle 支持的类型更多, 但是json更好用
# json 在其他语言也能用
import json
dic = {'name' : 'luck'} # 用json处理, --> 单引号变成双引号, 然后在最外面在加上""
data = json.dumps(dic)
# data是一个字符串类型, json的  就是说是{"name": "luck"},双引号, 这样的话其他语言也可以使用
print(data)
print(type(data))   # str

# dic = {'name' : 'luck'}  ---> {"name": "luck"}  ---> str({"name": "luck"})
# i = 8                    ---> str(8)
# s = 'hello'              --->"hello"            --->str("hello")
# l = [11,22]              --->"[11,22]"
json基本使用
# 普通的向文件中读写数据时:
#   如果向文件中存放一个字典, 将下面的字典放到文件中去
dic = {'name' : 'luck'}
str_d = str(dic)
#   写文件
f_write = open('dic.txt', 'w')
f_write.write(str_d)
f_write.close()
#   读文件
f_read = open('dic.txt', 'r')
data = f_read.read()    # z字符串   用eval转换成字典, 列表, 元祖, 但是不能转成类, 函数等
data  = eval(data)
print(data, type(data))  # {'name': 'luck'} <class 'dict'>
f_read.close()

 json读取文件,写文件,

# 普通的向文件中读写数据时:
#   如果向文件中存放一个字典, 将下面的字典放到文件中去
dic = {'name' : 'luck'}
str_d = str(dic)
#   写文件
f_write = open('dic.txt', 'w')
f_write.write(str_d)
f_write.close()
#   读文件
f_read = open('dic.txt', 'r')
data = f_read.read()    # z字符串   用eval转换成字典, 列表, 元祖, 但是不能转成类, 函数等
data  = eval(data)
print(data, type(data))  # {'name': 'luck'} <class 'dict'>
f_read.close()

#   思路就是: 现将数据转换成字符串,然后在写入文件,读的时候就是把字符串读出来,然后转换成一定的格式
#   dumps就相当于将数据转换成字符串, loads相当于将字符串读出来并转换成一定的格式
#   利用json实现
import json
dic = {'name': 'lucky'}
f_write = open('new.txt','w')  # 只需要将要写的数据传个dumps,返回一个字符串类型的数据
data = json.dumps(dic)   #  json.dump(dic, f_write)
f_write.write(data)
f_write.close()
#   读数据
f_read = open('new.txt', 'r')
data = json.loads(f_read.read())   # json.load(f_read)
print(data)
f_read.close()
json应用
原文地址:https://www.cnblogs.com/xiaokang01/p/9064836.html