亲宝软件园·资讯

展开

python笔记16

cuiyongchao007 人气:0

1.今日内容

  • 模块基础知识
  • timehttps://img.qb5200.com/download-x/datetime
  • json/picle
  • shutil
  • logging
  • 其他

2.内容回顾和补充

2.1模块(类库)

  • 内置
  • 第三方
  • 自定义

面试题:

  • 列举常用内置模块:json / time / os/ sys

2.2 定义模块

定义模块时可以把一个py文件或一个文件夹(包)当作一个模块,以方便于以后其他py文件的调用 。

对于包(文件夹)的定义:

  • py2:文件见中必须有 _ init _.py 。手工创建此文件即可。

    在pycharm中手工创建python package时候,默认自动会在这个文件中创建--init--.py文件。

  • py3:不需要 _ init _.py .

推荐大家以后写代码时,都要加上此文件。

2.3 模块的调用

2.3.1 示例一

# lizhongwei.py


#!/usr/bin/env python
# -*- coding:utf-8 -*-

def show():
    print('我司里种种')

def func():
    pass

print(456)
# 导入模块,加载此模块中所有的值到内存。所以此时先打印出:456。后打印该代码块下面的123。
import lizhongwei

print(123)
# 调用模块中的函数
lizhongwei.func()
# 导入模块
from lizhongwei import func,show
from lizhongwei import func
from lizhongwei import show
from lizhongwei import *

func()#from导入方法,直接使用函数。
# 导入模块
from lizhongwei import func as f#别名法,防止func函数与现有代码中函数重名。

def func():
    print(123)
f()

导入模块:

  • import 模块 使用方式:模块.函数()
  • from 模块 import 函数 使用方式:函数()
  • from 模块 import 函数 as 别名 使用方式:别名()

2.3.2 示例二

lizhong
    - jd.py
    - pdd.py
    - tb.py
包.py
#上个代码框中的文件夹中文件,引用如下方法:
import lizhong.jd
lizhong.jd.f1()
from lizhong import jd
jd.f1()
from lizhong.jd import f1
f1()

总结

  • 模块和要执行的py文件在同一目录 且 需要 模块中的很多功能时,推荐用: import 模块
  • 其他推荐:from 模块 import 模块 用法:模块.函数()
  • 其他推荐:from 模块.模块 import 函数 用法:函数()

注意: sys.path的作用是什么?sys.path默认在py的安装目录和执行文件当前所在的目录。

1、如果要增加非py安装目录下,需要append非py安装目录。sys.path.append('path')。

然后在引用目录下的py文件就可以引用成功:如:import page

2、如果page的上级目录和执行的文件在同一个目录(lib),这样引用也可以:

from lib import page

3、如果page和执行的py文件在同一个目录下,直接引用即可。

import page

练习题

将父级目录加入sys.path中,方便后期调用此父级下的代码块。
import sys
v=sys.path
print(v)
import os
print(__file__)
print(os.path.dirname(__file__))
print(os.path.abspath(__file__))
print(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(DIR)
print(sys.path)
===
['C:\\python\\venv', 'C:\\python', 'C:\\python\\python36\\python36.zip', 'C:\\python\\python36\\DLLs', 'C:\\python\\python36\\lib', 'C:\\python\\python36', 'C:\\python\\python36\\lib\\site-packages', 'C:\\python\\PyCharm 2019.2.2\\PyCharm 2018.2.1\\helpers\\pycharm_matplotlib_backend']
C:/python/venvhttps://img.qb5200.com/download-x/day15.py
C:/python/venv
C:\python\venv\day15.py
C:\python
['C:\\python\\venv', 'C:\\python', 'C:\\python\\python36\\python36.zip', 'C:\\python\\python36\\DLLs', 'C:\\python\\python36\\lib', 'C:\\python\\python36', 'C:\\python\\python36\\lib\\site-packages', 'C:\\python\\PyCharm 2019.2.2\\PyCharm 2018.2.1\\helpers\\pycharm_matplotlib_backend', 'C:\\python']

2.4 内置模块

  • os

  • sys

  • time

  • json

    • dumps

      • dump(v,f)#将v写入文件f中。
    • loads

      • print(load(f)),打印文件中内容。
    • 注意:

      • 字典或列表中如有中文,序列化时想要保留中文显示:

        v = {'k1':'alex','k2':'李杰'}
        
        import json
        val = json.dumps(v,ensure_ascii=False)#保留中文
        print(val)
      • dump

        import json
        
        v = {'k1':'alex','k2':'李杰'}
        
        f = open('x.txt',mode='w',encoding='utf-8')
        val = json.dump(v,f)
        print(val)
        f.close()
      • load

        import json
        
        v = {'k1':'alex','k2':'李杰'}
        
        f = open('x.txt',mode='r',encoding='utf-8')
        
        data = json.load(f)
        f.close()
        
        print(data,type(data))
  • haslib

  • random

  • getpass

  • shutil

  • copy

3. 今日内容

3.1 json和pickle

  • json,优点:所有语言通用;缺点:只能序列化基本的数据类型 listhttps://img.qb5200.com/download-x/dict/int...
  • pickle,优点:python中所有的东西都能被他序列化(socket对象);缺点:序列化的内容只有python认识。
import pickle

# #################### dumps/loads ######################
"""
v = {1,2,3,4}
val = pickle.dumps(v)#序列化出来不可读
print(val)
data = pickle.loads(val)
print(data,type(data))
"""

"""
#序列化函数(json做不到):
def f1():
    print('f1')

v1 = pickle.dumps(f1)
print(v1)
v2 = pickle.loads(v1)
v2()
"""

# #################### dump/load ######################
# 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)

==================
encording后称作字节
json:得出来的是字符串
pickle:得出来的是字符串

3.2 shutil 模块

import shutil

# 删除目录
# shutil.rmtree('test')

# 重命名,文件和目录都可以
# shutil.move('test','ttt')

# 压缩文件
# shutil.make_archive('zzh','zip','D:\code\s21day16\lizhong')

# 解压文件,有目录直接解压,无目录,则直接创建
# shutil.unpack_archive('zzh.zip',extract_dir=r'D:\code\xxxxxx\xxxx',format='zip')

示例

import os
import shutil
from datetime import datetime
ctime = datetime.now().strftime('%Y-%m-%d-%H-%M-%S')

# 1.压缩lizhongwei文件夹 zip
# 2.放到到 code 目录(默认不存在)
# 3.将文件解压到D:\x1目录中。

if not os.path.exists('code'):
    os.makedirs('code')
shutil.make_archive(os.path.join('code',ctime),'zip','D:\code\s21day16\lizhongwei')

file_path = os.path.join('code',ctime) + '.zip'
shutil.unpack_archive(file_path,r'D:\x1','zip')

3.3 time&datetime

UTC/GMT:世界时间

本地时间:本地时区的时间。

3.3.1 time模块

  • time.time() ,时间戳:1970-1-1 00:00
  • time.sleep(10),等待秒数。
  • time.timezone
# https://login.wx.qq.com/cgi-bin/mmwebwx-bin/login?loginicon=true&uuid=4ZwIFHM6iw==&tip=1&r=-781028520&_=1555559189206

3.3.2 datetime模块

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import time
from datetime import datetime,timezone,timedelta

# ######################## 获取datetime格式时间 ##############################
"""
v1 = datetime.now() # 当前本地时间
print(v1)
tz = timezone(timedelta(hours=7)) # 当前东7区时间
v2 = datetime.now(tz)
print(v2)
v3 = datetime.utcnow() # 当前UTC时间
print(v3)
"""
print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
# ######################## 把datetime格式转换成字符串 ##############################
# v1 = datetime.now()
# print(v1,type(v1))
# val = v1.strftime("%Y-%m-%d %H:%M:%S")
# print(val)

# ######################## 字符串转成datetime ##############################
# v1 = datetime.strptime('2011-11-11','%Y-%m-%d')
# print(v1,type(v1))

# ######################## datetime时间的加减 ##############################
# v1 = datetime.strptime('2011-11-11','%Y-%m-%d')
# v2 = v1 - timedelta(days=140)
# date = v2.strftime('%Y-%m-%d')
# print(date)

# ######################## 时间戳和datetime关系 ##############################
# ctime = time.time()
# print(ctime)
# v1 = datetime.fromtimestamp(ctime)
# print(v1)

# v1 = datetime.now()
# val = v1.timestamp()
# print(val)

3.4异常处理

try:
    val = input('请输入数字:')
    num = int(val)
except Exception as e:
    print('操作异常')
# import requests
#
# try:
#     ret = requests.get('http://www.google.com')
#     print(ret.text)
# except Exception as e:
#     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)

练习题

# 1. 写函数,函数接受一个列表,请将列表中的元素每个都 +100
def func(arg):
    result = []
    for item in arg:
        if item.isdecimal():
            result.append(int(item) + 100)
    return result 

# 2. 写函数去,接受一个列表。列表中都是url,请访问每个地址并获取结果。
import requests 
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 

def func2(url_list):
    result = []
    for url in url_list:
        try:
            response = requests.get(url)
            result.append(response.text)
        except Exception as e:
            pass
    return result 

func(['http://www.baidu.com','http://www.google.com','http://www.bing.com'])

异常处理结构:
try:
    pass
except Exception as e:
    pass 

加载全部内容

相关教程
猜你喜欢
用户评论