面试题:
定义模块时可以把一个py文件或一个文件夹(包)当做一个模块,以方便于以后其他py文件的调用。
对于包的定义:
py2:创建文件夹时必须有一个 _ _int _ _.py文件
py3:不需要创建 _ _int _ _.py
推荐以后写代码时,都要加上此文件。
# 本模块名字为mode.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
def show():
print(‘我是中国人‘)
def func():
pass
# 导入模块,加载此模块中所有的值到内存。
import mode
# 调用模块中的函数
mode.func()
#导入模块
from mode import func,show #只调用两个函数到内存中
from mode import func
from mode import show
from mode import * #调用mode文件中的所有到内存中
#使用模块中的函数
func()
#导入模块
from mode import func as f #如果被调用的模块中与当前文件中的函数重名,可以使用as 更改使用的名字
def func():
print(123)
f() #此时执行的是模块中的功能函数
导入模块:
mode:
- jd.py
- pdd.py
- tb.py
包.py
#调用mode包的jd模块中f1函数
#方式一:
import mode.jd
mode.jd.f1()
#方式二:
from mode import jd
jd.f1()
#方式三:
from mode.jd import f1
f1()
os
sys
time
json
dumps
loads
注意:中文序列化后默认变为ASCII码
字典或列表中如有中文,序列化时想要保留中文显示:
v = [‘k1‘:‘alec‘,‘k2‘:‘李亚楠‘]
import json
val = v.dumps(v,ensure_ascii=False)
print(val) #序列化后得到的结果保留了中文
dump(不常用):把序列化后的列表写入文件中
import json
v = [‘k1‘:‘alec‘,‘k2‘:‘李亚楠‘]
f = open(‘x.txt‘,mode=‘w‘,encoding=‘utf-8‘)
val = json.dump(v,f)
print(val)
f.close()
load
import json
v = [‘k1‘:‘alec‘,‘k2‘:‘李亚楠‘]
f = open(‘x.txt‘,mode=‘r‘,encoding=‘utf-8‘)
val = json.load(f)
f.close()
print(val,type(val))
haslib
random
getpass
shutil
copy
import pickle
# #################### dumps/loads ######################
v = {1,2,3,4}
val = pickle.dumps(v)
print(val)
data = pickle.loads(val)
print(data)
###也可以序列化函数
def f1():
print(‘f1‘)
v1 = pickle.dumps(f1)
print(v1)
v2 = pickle.loads(v1)
v2()
# #################### dump/load ######################
#因为写入的都是二进制,所以读写模式改为wb / rb
v = {1,2,3,4}
f = open(‘x.txt‘,mode=‘wb‘)
val = pickle.dump(v,f)
f.close()
f = open(‘x.txt‘,mode=‘rb‘)
data = pickle.load(f)
f.close()
print(data)
字节知识点:
b‘\x80\x03cbuiltins\nset\nq\x00]q\x01(K\x01K\x02K\x03K\x04e\x85q\x02Rq\x03.‘
此称为字节类型
删除和修改文件示例:
import shutil
#只能删除文件夹
shutil.rmtree(‘codett‘)
#能修改文件和文件夹
shutil.move(‘codeTT‘,‘codett‘)
shutil.move(‘test.py‘,‘test01.py‘)
压缩和解压文件示例:
import shutil
#压缩文件,自动压缩到当前目录。参数(‘压缩文件名称‘,‘压缩后文件格式‘,‘被压缩文件路径‘)
shutil.make_archive(‘zzp‘,‘zip‘,‘D:\pycharm_project\python36\codett‘)
#解压文件,参数(‘当前目录下需解压文件‘,‘解压到路径下‘,‘解压后格式‘)
#(extract_dir=)表示如果解压的路径不存在,则创建路径
shutil.unpack_archive(‘zzp.zip‘,extract_dir=‘D:\code02\codett‘,format=‘zip‘)
获取当前时间
from datetime import datetime
#获取当前时间
ctime01 = datetime.now()
ctime02 = datetime.now().strftime(‘%Y-%m-%d-%H-%M-%S‘)
print(ctime01) #2019-09-10 10:27:32.746868
print(ctime02) #2019-09-10-10-27-32
练习题:
from datetime import datetime
import os
import shutil
#获取当前时间
ctime01 = datetime.now()
ctime02 = datetime.now().strftime(‘%Y-%m-%d-%H-%M-%S‘)
#1.压缩codett文件夹 zip
#2.放到code目录(默认不存在)
#3.将文件解压到D:\xx目录中
shutil.make_archive(os.path.join(‘code‘,ctime02),‘zip‘,‘D:\pycharm_project\python36\codett‘)
file_path = os.path.join(‘code‘,ctime02)+ ‘.zip‘
shutil.unpack_archive(file_path,r‘D:\xx‘)
时区及时间
from datetime import datetime,timezone,timedelta
v1 = datetime.now() #当前本地时间
print(v1)
v2 = datetime.utcnow() #当前UTC世界时间
print(v2)
#东7区时间,hours=-7表示西7区时间
tz = timezone(timedelta(hours=7))
v3 = datetime.now(tz)
print(v3)
from datetime import datetime
v1 = datetime.now()
print(v1,type(v1)) #2019-09-10 18:06:59.265811 <class ‘datetime.datetime‘>
val = v1.strftime("%Y-%m-%d %H:%M:%S")
print(val,type(val)) #2019-09-10 18:06:59 <class ‘str‘>
#做时间的相加减,必须转换为datetime格式,才能相加减
from datetime import datetime
v1 = datetime.strptime(‘2016-07-07 11:00‘,‘%Y-%m-%d %H:%M‘) #转换成datetime格式
v2 = v1 - timedelta(days=140) #天数加140天,timedelta可以查看里面的参数,加减年月周日时分秒
print(v2,type(v2))
data = v2.strftime(‘%Y-%m-%d %H:%M‘) #转换成字符串格式
print(data,type(data))
import time
from datetime import datetime
# #######时间戳转换成datetime时间##############################
ctime = time.time() #获取当前时间戳
print(ctime) #输出1568112171.719181
v1 = datetime.fromtimestamp(ctime) #转换成datetime时间
print(v1) #输出2019-09-10 18:42:51.719181
# #######datetime时间转换成时间戳##############################
v2 = datetime.now() #获取当前时间
print(v2)
val = v2.timestamp() #转换成时间戳
print(val)
可以适用于任何地方,遇到能让程序崩溃的地方可以加上
#如果输入错误则处理异常,返回“输入异常”
try:
val = input(‘请输入数字:‘)
data = int(val)
except Exception as e:
print("输入异常")
#except+类型错误:可以适用于自己预知的各种错误,try和except配合使用,和if....elif....类似
#加else:没有异常的时候执行else
#finally:不管有没有异常,都会执行,一般用于函数,前面执行return时也会先执行finally再执行return
try:
# [][3]
ret = int(input(‘number:‘))
print(ret*‘*‘)
except ValueError:
print(‘您输入的内容有误,请输入一个数字‘)
except IndexError:
print(‘超出列表的最大长度了‘)
except Exception:
print(‘整体崩溃‘)
else:
print(‘没有异常的时候执行else中的代码‘)
finally:#例子:文件关闭,或者数据库断开连接,return和finally相遇时,finally也会执行
print(‘不管有没有异常,都会执行‘)
#适用于函数
def func(a):
try:
return a.strip()
except Exception as e:
pass
return False
v = func(‘alex‘)
if not v:
print(‘函数执行失败‘)
else:
print(‘结果为‘,v)
列子:写异常捕获前分析try的位置,位置不同结果不同。比如:
#写函数,接收一个url列表,请访问每一个地址并打印结果出来
import requests
def func(url_list):
result = []
for url in url_list:
try:
response =requests.get(url)
result.append(response.text)
except Exception as e:
pass
return result
val = func([‘http://www.baidu.com‘,‘http://www.google.com‘,‘http://www.bing.com‘])
print(val)
#同上,如果异常捕获try写在for循环外面,则无法捕获异常。
def func(url_list):
result = []
try:
for url in url_list:
response =requests.get(url)
result.append(response.text)
except Exception as e:
pass
return result
raise,主动抛出异常
def connect_db(e):
count = 0
while count < 3:
e.wait(1)
if e.is_set() == True:
print(‘连接数据库‘)
break
else:
count += 1
print("第%s次数据库连接失败"%count)
else:
raise TimeoutError(‘数据库连接超时‘)
#如果三次机会都连接失败,则抛出超时异常
try:
pass #要执行的代码块
except Exception as e:
pass #遇到程序崩溃要抛出的异常
python笔记(15)--模块扩展(time/json/shutil/logging)和异常捕获处理
原文:https://www.cnblogs.com/lynlearnde/p/12909616.html