您的位置:首页 > 编程语言 > Python开发

Python学习笔记:import与常用内置库

2017-11-24 12:13 507 查看

模块

Python模块实质为py文件,Python在importpy模块时默认会在sys.path所包含的路径中去寻找,搜索失败时会出错。

导入整个模块

假设有一个module.py文件,代码如下:

var=1

def func():
print("module function")


在同一路径中有一个test.py文件,代码如下:

import module        #在sys.path中搜索module.py文件

print(module.var)
module.func()


import整个文件实质上会将module.py中的所有代码解释一遍,并将结果以文件名同名变量返回,返回结果可理解为是一个对象,因为调用模块中的成员需要用’模块名.成员’的形式。

test.py运行结果:



导入模块的部分代码

#直接导入对应的代码部分,相当于代码复制
from module import var,func

print(var)
func()

# 与导入代码同名会产生覆盖
var=2
def func():
print("test funtion")

print(var)
func()




Python中包是指包含多个可调用模块的文件夹,除了可调用模块外,包默认包含一个特殊的__init__.py文件,这个文件中的代码在包被导入时会自动执行。

Python包的一个使用示例如下:



__init__.py:

print("package __init__.py running...")

from . import package_file_1
from . import package_file_2


package_file_1.py:

def package_func_1():
print("package function_1 running...")


package_file_2.py:

def package_func_2():
print("package function_2 running...")


test.py:

import package        #在导入包的时候会执行__init__.py中的代码

package.package_file_1.package_func_1()
package.package_file_2.package_func_2()


test.py运行结果:



跨目录调用

假设项目目录结构如下图所示,func为项目执行入口,配置程序与主程序均在func中被调用。



settings.py代码:

def settings():
print("settings running...")


main.py代码:

def main():
print("main running...")


func.py代码:

import os

#获取本文件所在绝对路径,往上返回两层得到项目路径
BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

import sys

sys.path.append(BASE_DIR)

from conf import settings

settings.settings()

from core import main

main.main()


运行func.py输出:



内置库

time

import time


Python支持三种格式的时间:时间戳、元组和字符串,三种时间格式之间可以相互转换。

time():返回以秒为单位的当前时间戳。

time.time()


输出为:1511520388.6707194

gmtime()与localtime():分别将时间戳转换为元组格式的UTC时间与当地时间。

print(time.gmtime(time.time()))
print(time.localtime(time.time()))


输出为:

time.struct_time(tm_year=2017, tm_mon=11, tm_mday=24, tm_hour=10, tm_min=47, tm_sec=42, tm_wday=4, tm_yday=328, tm_isdst=0)

time.struct_time(tm_year=2017, tm_mon=11, tm_mday=24, tm_hour=18, tm_min=47, tm_sec=42, tm_wday=4, tm_yday=328, tm_isdst=0)

mktime():将元组格式转换成时间戳。

time.mktime(time.localtime(time.time()))


输出为:1511520462.0

asctime()与ctime():分别将元组格式和时间戳转换成字符串。

time.asctime(time.localtime(time.time()))
time.ctime(time.time())


输出均为:’Fri Nov 24 18:47:42 2017’

strftime():将元组格式转换成指定格式的字符串。

time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time.time()))


输出为:’2017-11-24 18:47:42’

strptime():将字符串一指定格式转换成元组格式。

time.strptime('2017-11-24 18:47:42',"%Y-%m-%d %H:%M:%S")


输出为:time.struct_time(tm_year=2017, tm_mon=11, tm_mday=24, tm_hour=18, tm_min=47, tm_sec=42, tm_wday=4, tm_yday=328, tm_isdst=-1)

random

import random
random.seed(42)


Python的random模块实现了一个伪随机数生成器,若未指定随机数种子,会默认使用系统的当前时间。

输出为:0.7364712141640124

uniform():在范围内产生随机浮点数。

random.uniform(0,1)


输出为:0.6498780576394535

randrange():在range范围内产生随机整数。

random.randrange(0,10)


输出为:6

choice():在可迭代对象中随机选取元素。

random.choice("abcdefg")


输出为:’c’

sample():在可迭代对象中进行无放回的随机采样。

random.sample("abcdefg",2)


输出为:[‘g’, ‘b’]

shuffle():对序列对象进行内部洗牌(改变序列对象)。

l=[1,2,3,4,5]
random.shuffle(l)
l


输出为:[2, 4, 3, 5, 1]

使用sample()方法可以实现外部洗牌(不改变序列对象)。

l=[1,2,3,4,5]
random.sample(l,len(l))


实现一个验证码生成器。

import random

code_len=4
code=''

for i in range(code_len):
char_or_num=random.randrange(0,2)
if char_or_num:
code+=chr(random.randrange(65,91))
else:
code+=chr(random.randrange(48,58))

print(code)


输出为:3D99

os

import os


Python的os模块提供了一些系统级操作。

os.getcwd():get current working directory。

os.getcwd()


输出为:’C:\Users\qq435\Desktop\source\python’

os.listdir():返回包含指定目录下所有文件\文件夹的列表。

os.listdir(".")


输出为:[‘.ipynb_checkpoints’, ‘.vscode’, ‘temp.py’, ‘test’, ‘Untitled-1.py’, ‘Untitled.ipynb’, ‘__pycache__’]

os.scandir():返回包含包含指定目录下所有文件\文件夹的迭代器,速度快于os.listdir()。

for item in os.scandir("."):
print(item)


输出为:

<DirEntry '.ipynb_checkpoints'>
<DirEntry '.vscode'>
<DirEntry 'temp.py'>
<DirEntry 'test'>
<DirEntry 'Untitled-1.py'>
<DirEntry 'Untitled.ipynb'>
<DirEntry '\__pycache__'>


os.chdir():Change the current working directory。

# os.chdir(r'C:\Users\qq435\Desktop\source')
os.chdir("..")


os.makedirs():递归创建目录,路径存在时会报错。

os.makedirs(r".\test\test\test")




os.rmdir():删除指定目录。

os.rmdir(r".\test\test\test")




os.removedirs():尝试递归删除指定路径的所有非空目录。

os.removedirs(r".\test\test")


注意,如果在”.\test”目录非空的话,那么”.\test”目录不会被删除。

os.remove():删除指定文件。

os.remove(r".\Untitled-1.py")


os.environ:显示环境变量。

os.environ


os.sep:显示当前系统的路径分隔符。

os.sep


输出为:’\’

os.linesep:显示当前系统的行分隔符。

os.linesep


输出为:’\r\n’

os.pathsep:显示当前系统环境变量的路径分隔符。

os.pathsep


输出为:’;’

re

import re


参考博客

语法基本

#对指定字符匹配指定次数
re.search('(!){1}',"@#$!").group()        #匹配一次'!'


输出为:’!’

#[]字符集,满足字符集中任意字符即可
s1="I love my mommy."
s2="I love my mummy."
print(re.search("(m[ou]mmy){1}",s1).group(),re.search("(m[ou]mmy){1}",s2).group())


输出为:mommy mummy

#匹配数字
re.search("[0-9]{2}","abc123abc").group()        #匹配两次数字


输出为:’12’

#[^]字符集取反
re.search("([^a-zA-Z]){3}","@#$aBc$%^").group()        #匹配非字母字符


输出为:’@#$’

#".":匹配一次除"\n"之外的所有字符
re.search("(.){2}","\na1@").group()


输出为:’a1’

#"+":最大化匹配
re.search("([a-zA-Z])+","ab12cde").group()


输出为:’ab’

re.search("(.)+","ab12!\n@").group()        #最大化匹配除'\n'外的所有字符


输出为:’ab12!’

re.search("a.+e","abdegh").group()        #以a开头,多次匹配任意字符,再以e结尾


输出为:’abde’

re.search("a[a-zA-Z]+e","a12eabcde").group()        #以a开头,多次匹配字母,再以e结尾


输出为:’abcde’

#"?"匹配某个字符至多一次,与"+"的作用相对应
re.search("1[0-9]?3","123").group()      #1与3中间的一个数字可以是缺失的


输出为:’123’

#"{n,m}"指定匹配n到m次
re.search("1[0-9]{1,2}","12345").group()      #1开头,再匹配一到两个数字


输出为:’123’

#"|"或条件匹配
re.search("12345|67890",string).group()        #匹配12345或67890


输出为:’12345’

#"^"从首个字符开始匹配
#"$"从结束字符开始匹配
#常用于验证字符串的首尾字符
re.search("^<(.)+>$","<abc><123>").group()


输出为:
<abc><123>


#(?P<name>str)对匹配到的字符命名
ID_number="543635198712050040"        #捏造一个身份证号
res_dict=re.search("(?P<add_code>([0-9]){6})(?P<birth_code>([0-9]){8})",ID_number).groupdict()
print(res_dict['add_code'],res_dict['birth_code'])


输出为:543635 19871205

匹配反斜杠

re.search("\\\\","3\8").group()


输出为:’\’

findall()

#找出所有满足规则的字符
re.findall("([0-9]){1}","1a2b3c")


输出为:[‘1’, ‘2’, ‘3’]

split()

#按指定模式分割字符串
re.split("#+","12###abc#34")


输出为:[‘12’, ‘abc’, ‘34’]

sub()

#按照指定模式替换字符
re.sub("(\\\\)+","#","\\代码中的注释")


输出为:’#代码中的注释’

多行模式

string="1.abc\n2.def\n3.ghi\n"
re.search("^(2.)(.)+",string,flags=re.M).group()


输出为:’2.def’
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python