Python自学day-5
#file = modules.py
name = "Leo"
def say_hello():
print("Hello")
#file = main.py #调用modules模块
import modules #导入模块
print(modules.name) #使用 模块名.变量名 来引用模块中的变量
modules.say_hello() #使用 模块名.函数名 来调用模块中的函数
import module1,module2
- 标准模块(标准库)
- 开源模块(第三方模块)
- 自定义模块
import modules #import 模块名
modules.say_hello() #模块名.函数名() from modules import say_hello #from 模块名 import 函数名
say_hello() #函数名()直接调用 from modules import say_hello
def say_hello(): #本地存在say_hello()
print("local say_hello")
say_hello() #调用本地的say_hello def say_hello():
print("local say_hello")
from modules import say_hello #复制了modules里的say_hello覆盖本地的say_hello函数变量
say_hello() #调用导入的say_hello
import modules as m
m.say_hello()
from modules import say_hello as leo_say_hello #leo_say_hello别名
leo_say_hello()
import modules
import package_test #相当于导入__init__
- 在sys.path的路径中查到模块文件
- 需要把待导入文件的目录加入到sys.path中
import os
import sys
p = os.path.abspath(__file__) #获取文件绝对路径
p_p = os.path.dirname(p) #获取文件目录
p_p_p = os.path.dirname(p_p) #获取文件再上一级目录
sys.path.append(p_p_p) #将搜索目录加入sys.path中
二、time模块:
- 时间戳:time.time(),输出一串数据,单位是s,从1970年开始到现在的时间。
- 格式化时间:按照自己的格式定义时间。'2017-09-27 22:54:30'
- 元组:共九个元素。分别是年、月、日、时、分、秒、周的第几天(从0开始)、当年第几天、是否夏令时。
print(time.time()) #时间戳 ,输出1506524291.994569
print(time.localtime(1306324267)) #返回元组。用于取值
print(time.timezone/3600) #timezone获取的时间单位是s,除3600换算成小时。
time.time():获取时间戳
time_tuple = time.localtime() #获取当前时区、当前时间的元组
print(time_tuple.tm_year) #获取年
time_stamp = time.mktime(time_tuple)
print(time_stamp) #返回时间戳
print(time.strftime("%y-%m-%d %X",time.localtime()))
time.strptime():将格式化的字符串时间转换为元组
print(time.strptime("2017-09-27 23:41:21",'%Y-%m-%d %H:%M:%S'))
import datetime
now_time = datetime.datetime.now()
print(now_time) #打印 2017-09-28 00:07:41.636529
datetime.timedelta():时间间隔。与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=-20)) #获取20分钟前
三、random模块
print(random.random()) #输出0.8767524392823185
print(random.randint(1,3)) #返回[1,3]的值,包含1,2,3
random.randrange():range是顾头不顾尾。
print(random.randrange(3)) #返回[0,3)的值,包含0,1,2
print(random.choice("Hello")) #返回H、e、l、o其中一个字符
print(random.uniform(1,3)) #返回[1,3]之间的浮点数 2.0503629577638613
print(random.sample('abcdefghijk',3)) #返回字符串中任意3个字符,组成列表。例如[b,j,k]
random.shuffle():将一个有序的列表,洗牌。参数只能是list
item = [1,2,3,4,5,6,7,8]
print(item) #输出[1,2,3,4,5,6,7,8]
random.shuffle(item)
print(item) #输出[3,5,4,1,6,8,7,2]
四、os模块
print(os.getcwd()) #返回 D:\pycharm_workspace\FirstProject\day6
os.chdir("D:\\pycharm_workspace")
os.chdir(r"D:\pycharm_workspace") #建议使用这种
print(os.getcwd())
os.curdir:属性,当前目录 ' . '
os.makedirs(r"D:\Leo\leo\eo\o")
os.makedirs(r"D:\Leo\leo\eo\o",mode=0o777,exist_ok=True) #exist_ok为True,目录存在时不报错。
os.removedirs(r"D:\Leo\leo\eo\o") #当o为空,则删除eo,eo为空则继续删除leo,一直递归删除到D:
os.mkdir():创建单层目录
print(os.listdir("D:\\"))
os.remove():删除一个文件
os.rename("D:\\Leo","D:\\Oel")
os.stat():返回文件信息。其中包括重要的最近访问时间、最近修改时间、创建时间。
print(os.stat("D:\\Oel"))
print(os.stat("D:"+os.sep+"Oel"+os.sep+"hello.txt"))
os.linesep:属性,返回当前操作系统下的换行符。windows下是\r\n,linux下是\n
print(os.environ["PATH"]) #获取PATH环境变量
os.system():执行操作系统命令。
os.system("dir")
os.system("ipconfig")
os.path.abspath():获取文件的绝对路径。
print(os.path.split("D:\\Oel\\eo\\hello.txt")) #('D:\\Oel\\eo', 'hello.txt')
print(os.path.basename("D:\\Oel\\eo\\hello.txt")) #返回 hello.txt
os.path.exists():返回目录是否存在,True或False
print(os.path.exists("D:\\Oel"))
os.path.isabs():是否是绝对路径
print(os.path.isabs("D:\\Oel")) #返回True(windwos下)
print(os.path.isabs("Oel")) #返回False
print(os.path.isabs("/Oel")) #返回True(linux下)
os.path.isfile():判断是否是文件
print(os.path.isfile("D:\\Oel\\hello.txt")) #返回True
os.path.isdir():判断是否是目录
print(os.path.isdir("D:\\Oel\\hello.txt")) #返回False
print(os.path.join("D:\\","Oel\\","hello.txt")) #返回 D:\Oel\hello.txt
os.path.getatime():返回指定路径文件或者目录的最后访问时间戳。
input = sys.stdin.readline()
print(input)
六、shutil模块
import shutil
f1 = open("fsrc.txt","r",encoding="utf-8")
f2 = open("fdst.txt","w",encoding="utf-8")
shutil.copyfileobj(f1,f2)
shutil.copyfile():参数为源文件和目标文件的名称。实现原理是打开文件,并调用copyfileobj()。
import shutil
shutil.copyfile("fsrc.txt","fdst.txt")
shutil.copymode():拷贝权限。
import shutil
shutil.copy("fsrc.txt","D:\\Oel\\fdst.txt") #将fsrc.txt文件拷贝到D:\Oel\fdst.txt
shutil.copy("fsrc.txt","D:\\Oel\\") #将fsrc.txt文件拷贝到D:\Oel目录下
shutil.copy2():拷贝文件、状态(包含权限)。
import shutil
shutil.copytree("a","a1") # a文件夹与执行文件处于一层
shutil.rmtree():删除目录。
import shutil
shutil.rmtree("a")
shutil.move():移动文件
import zipfile
z = zipfile.ZipFile("test.zip","w")
z.write("__init__.py")
z.write("makezip.py")
z.close()
七、shelve模块
import shelve
d = shelve.open("shelve_test") #打开一个文件
class Test(object): #定义类
def __init__(self,n):
self.n = n
def pn(self):
print(self.n)
t1 = Test(123) #定义对象t1
t2 = Test(234) #定义对象t2
name = ["alex","rain","test"] #列表
age = {"alex":1,"rain":2,"test":3} #字典
job = ("IT","金融","房地产") #元组
addr = {"成都","海口","南京"} #集合
d["name"] = name #将各数据类型序列化,通过字典的方式存储在文件shelve_test中
d["age"] = age
d["job"] = job
d["addr"] = addr
d["t1"] = t1
d["t2"] = t2
d.close() #关闭序列化文件
反序列化:
import shelve
class Test(object):
def __init__(self,n):
self.n = n
def pn(self):
print(self.n)
d = shelve.open("shelve_test") #读模式打开序列化文件
print(d.get("name")) #使用get()读取数据
print(d.get("age"))
print(d.get("job"))
print(d.get("addr"))
tt1 = d.get("t1") #读取函数或对象,必须存在对应的类定义和函数定义
tt2 = d.get("t2")
tt1.pn()
tt2.pn()
d.close()
八、xml模块
九、ConfigParser模块
[Default]
Name = Leo
Version = 2.1.0
User = leo [Addrees]
IP = 192.168.1.1
Mac = 22:22:22:22:22:22
import configparser #导入模块
config = configparser.ConfigParser() #产生一个实例
config["Default"] = {"Name":"Leo","Age":22,"Addr":"成都"}
config["Info"] = {} with open('example.ini','w',encoding="utf-8") as config_file: #打开配置文件
config.write(config_file) #写入配置
写入结果:
[Default]
name = Leo
age = 22
addr = 成都 [Info]
如何读取一个配置文件:
import configparser
config = configparser.ConfigParser()
config.read('example.ini') #直接读配置
print(config.sections()) #打印所有section名称,返回列表。例如["Default","Info"]
print(config["Default"]["Name"]) #打印配置数据
import configparser
config = configparser.ConfigParser()
config.read('example.ini')
config.remove_section("Info")
with open('example.ini','w') as f:
config.write(f)
十、hashlib模块,hmac模块
import hashlib #导入模块
m = hashlib.md5() #获取MD5加密对象
m.update(b"Hello") #加密Hello
print(m.hexdigest()) #解密成16进制格式。输出8b1a9953c4611296a827abf8c47804d7
m.update(b"World") #加密Hello+World
print(m.hexdigest())
m2 = hashlib.md5() #输出68e109f0f40ca72a15e05cc22786f8e6
m2.update(b"HelloWorld") #加密HelloWorld,对比两次是否一样
print(m.hexdigest()) #输出68e109f0f40ca72a15e05cc22786f8e6,与前面update后加密值一样
import hashlib
m = hashlib.sha512()
m.update(b"Hello")
print(m.hexdigest())
m.update(b"World")
print(m.hexdigest())
m2 = hashlib.sha512()
m2.update(b"HelloWorld")
print(m.hexdigest()) #返回 8ae6ae71a75d3fb2e0225deeb004faf95d816a0a58093eb4cb5a3aa0f197050d7a4dc0a2d5c6fbae5fb5b0d536a0a9e6b686369fa57a027687c3630321547596
import hmac
h = hmac.new(b"Leo") #创建key
h.update(b"helloworld") #加入内容
print(h.hexdigest())
m.update("你好,这里是中国移动".encode(encoding="utf-8"))
import hashlib
md1 = hashlib.md5()
md1.update("hello".encode(encoding="utf-8"))
md2 = hashlib.md5()
md2.update(b"hello")
print(md1.hexdigest()) #两种方式出来结果一致
print(md2.hexdigest())
十一、re正则表达式模块
import re
res = re.match("^leo\d+","leo123") #第一个参数是匹配模式,第二个是字符串
if res: #如果没值就是None
print(res.group()) #匹配到了就使用group获取
import re
res = re.match('\d{11}',"number 18111566225" )
if res:
print(res.group()) #匹配不到
import re
res = re.match('[0-9]{11}',"" )
if res:
print(res.group()) #匹配到18111566222 import re
res = re.match('[1-9]{11}$',"18111566222abc" )
if res:
print(res.group()) #匹配不到,因为$代表结尾
import re
res = re.search('num\w+\s\w+\s\d{11}',"Telephone number is 18111566222" )
print(res.group()) #匹配到number is 18111566222
re.findall():在字符串中匹配所有可以匹配到的值,并返回一个列表。
import re
res = re.findall('num\w+\s\w+\s\d{11}',"Telephone number is 18111566222,number is 18111566222" )
print(res) #返回列表["number is 18111566222","number is 18111566222"]
Python自学day-5的更多相关文章
- python自学笔记
python自学笔记 python自学笔记 1.输出 2.输入 3.零碎 4.数据结构 4.1 list 类比于java中的数组 4.2 tuple 元祖 5.条件判断和循环 5.1 条件判断 5.2 ...
- Python - 自学django,上线一套资产管理系统
一.概述 终于把公司的资产管理网站写完,并通过测试,然后上线.期间包括看视频学习.自己写前后端代码,用时两个多月.现将一些体会记录下来,希望能帮到想学django做web开发的人.大牛可以不用看了,小 ...
- 拎壶冲冲冲专业砸各种培训机构饭碗篇----python自学(一)
本人一直从事运维工程师,热爱运维,所以从自学的角度站我还是以python运维为主. 一.python自学,当然少不了从hello world开始,话不多说,直接上手练习 1.这个可以学会 print( ...
- [Python自学] day-21 (2) (Cookie、FBV|CBV装饰器)
一.什么是Cookie 1.什么是Cookie? Cookie是保存在客户端浏览器中的文件,其中记录了服务器让浏览器记录的一些键值对(类似字典). 当Cookie中存在数据时,浏览器在访问网站时会读取 ...
- [Python自学] day-21 (1) (请求信息、html模板继承与导入、自定义模板函数、自定义分页)
一.路由映射的参数 1.映射的一般使用 在app/urls.py中,我们定义URL与视图函数之间的映射: from django.contrib import admin from django.ur ...
- [Python自学] day-20 (Django-ORM、Ajax)
一.外键跨表操作(一对多) 在 [Python自学] day-19 (2) (Django-ORM) 中,我们利用外键实现了一对多的表操作. 可以利用以下方式来获取外键指向表的数据: def orm_ ...
- [Python自学] day-19 (2) (Django-ORM)
一.ORM的分类 ORM一般分为两类: 1.DB first:先在DB中创建数据库.表结构,然后自动生成代码中的类.在后续操作中直接在代码中操作相应的类即可. 2.Code first:直接在代码中实 ...
- [Python自学] day-19 (1) (FBV和CBV、路由系统)
一.获取表单提交的数据 在 [Python自学] day-18 (2) (MTV架构.Django框架)中,我们使用过以下方式来获取表单数据: user = request.POST.get('use ...
- [Python自学] day-18 (2) (MTV架构、Django框架、模板语言)
一.实现一个简单的Web服务器 使用Python标准库提供的独立WSGI服务器来实现MVC架构. 首先,实现一个简单的Web服务器: from wsgiref.simple_server import ...
- Python自学之路---Day13
目录 Python自学之路---Day13 常用的三个方法 匹配单个字符 边界匹配 数量匹配 逻辑与分组 编译正则表达式 其他方法 Python自学之路---Day13 常用的三个方法 1.re.ma ...
随机推荐
- c#开发移动APP-Xamarin入门
原文:c#开发移动APP-Xamarin入门 如果您在.net环境下做开发,并且对WPF技术有一定了解及应用,同时也想进入移动App开发领域,推荐使用Xamarin开发移动应用 关于Xamarin不做 ...
- OpenGL(二十一) glPolygonOffset设置深度偏移解决z-fighting闪烁问题
开启深度测试后OpenGL就不会再去绘制模型被遮挡的部分,这样实现的显示画面更为真实,但是由于深度缓冲区精度的限制,对于深度相差非常小的情况(例如在同一平面上进行两次绘制),OpenGL就不能正确判定 ...
- Android Studio右键选项中没有Git?
从Git clone一个Project并打开后,都会习惯性的像使用Eclipse一样,选中project右键,选择Git的相应版本号控制选项. 例如以下图,你仅仅看到了svn. 怎样配置才干在右键选项 ...
- error C2220: 警告被视为错误 - 没有生成“object”文件
原文:error C2220: 警告被视为错误 - 没有生成"object"文件 这种错误的原因是:原因是该文件的代码页为英文,而我们系统中的代码页为中文. 解决方案: 1. ...
- Matlab随笔之分段线性函数化为线性规划
原文:Matlab随笔之分段线性函数化为线性规划 eg: 10x, 0<=x<=500 c(x)=1000+8x, 500<=x<=1000 300 ...
- .NET 上传并解析CSV文件存库
1.前端: 放置浏览按钮 <div class="row inner_table text-center"> <input id="fileId&quo ...
- js 点谁谁哭
<!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...
- 深入理解Delphi的消息机制(别人写的,简明扼要,用来复习)
永远记住,无论你是用 SDK 还是借用 VCL 来创建窗口,都要遵循 Windows 的游戏规则,即先注册窗口类,然后再创建窗口实例,在消息循环中写实现代码.你还要知道 Windows 已经为了我们预 ...
- 发布ActiveX控件
最近我们正在研究ActiveX技术.我们使用Delphi 5创建了一个具有ActiveForm的ActiveX控件应用程序.这个控件产生一个.OCX文件.现在,我们需要把这个控件部署在服务器端,在用户 ...
- Android自定义View入门(一)
最近在写一个关于音乐播放的应用,写到播放界面UI时,就想自己实现的一个播放界面.那么如何实现自定义View呢?通过查看他人博客和Android官方开发文档,初步了解了一些浅显的内容.在此记录,已供需要 ...