初学python之day5

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初学python之day5相关的知识,希望对你有一定的参考价值。

一、python学习之模块:

1.模块的本质:

模块的本质就是用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能).py结尾的python文件

2.模块的使用方法:

import +文件名                  如:import test1                                              (文件名一定不要加.py)

导入多个文件则为 import+文件名,文件名         如import test1,test2

from test1 import *                                将test1模块的东西全部导入过来并执行一遍                       (建议不要使用)

from test1 import m1,m2,m3                   将test1模块中的m1,m2,m3分别导入

from test import logger as logger_alex      导入的模块名与当前的函数名相同,则可用as对导入的模块名重命名

3.导入的本质:

导入模块的本质就是把python文件解释一遍;

导入包的本质就是执行该包下的__init__.py文件;

4. 模块分类:

自定义模块

内置标准模块(标准库)
开源模块

4-1自定义模块

4-1-a.当前文件的绝对路径:

import os#导入os模块
dir = os.path.abspath(__file__)
print(dir)

4-1-b.当前文件的父级目录绝对路径:

import os#导入os模块
dir = os.path.dirname(os.path.abspath(__file__))
print(dir)

 

4-1-c.当前文件的父级目录的父级目录绝对路径:

import os #导入os模块
dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
print(dir)


4-1-d.如果模块和自己写的程序不在同一个目录下,则可以通过sys.path.append(路径)把模块的路径添加到程序中。

import os,sys

dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))#获取python目录的绝对路径
sys.path.append(dir)#讲python目录的路径添加到程序中
#-----想要快速找到该路径,则可使用insert将要添加的目录路径插入到path前面
# sys.path.insert(dir)
import old from read_new #导入read_new.py文件

#在当前路径下调用read_new.py里的某个函数,如user()
read_new.user()

 

4-2 内置标准模块

4-2-1 time&detetime 
时间相关的操作,时间有三种表示方式:
时间戳 1970年1月1日之后的秒,即:time.time()
格式化的字符串 2016-8-23 11:11, 即:time.strftime(‘%Y-%m-%d‘)
结构化时间 元组包含了:年、日、星期等.time.struct_time 即:time.localtime()

学习要点:

获取当前系统时间

print(time.ctime()) 

## 将字符串转换成日期格式

str_to_date = datetime.datetime.strptime("2016-02-01""%Y-%m-%d")
print(str_to_date)  # 输出=>2016-02-01 00:00:00

## 比现在快5天,(如果是慢5天用减号)

new_date = datetime.datetime.now() + datetime.timedelta(days=5)
print(new_date)

## 比现在快5小时(hours)

new_date = datetime.datetime.now() + datetime.timedelta(hours=10)
print(new_date)    
 
## 比现在快100秒(seconds)
new_date = datetime.datetime.now() + datetime.timedelta(seconds=120)
print(new_date)
 
4-2-2 random---生成随机数

import random
checkcode = ‘‘
for i in range(4):
  current = random.randrange(0,4)
  if current != i:
    temp = chr(random.randint(10,100))
  else:
    temp = random.randint(0,9)
  checkcode += str(temp)
print (checkcode)

4-2-3 os模块

os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
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下为"\t\n",Linux下为"\n"
os.pathsep 输出用于分割文件路径的字符串
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.isfile(path) 如果path是一个存在的文件,返回True。否则返回False
os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False
os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间
os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间

4-2-4 sys模块

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


4-2-5 shutil模块----高级的 文件、文件夹、压缩包 处理模块

--1--shutil.copyfileobj(fsrc, fdst[, length])----
将文件内容拷贝到另一个文件中,可以部分内容

def copyfileobj(fsrc, fdst, length=16*1024):
"""copy data from file-like object fsrc to file-like object fdst"""
while 1:
buf = fsrc.read(length)
if not buf:
break
fdst.write(buf)

 

--2--shutil.copyfile(src, dst)----
拷贝文件:shutil.copyfile(src="D:\WorkSpace\day6\\test1.txt",dst="D:\WorkSpace\day6\\test2.txt")

 

--3-- shutil.copystat(src, dst)----

拷贝状态的信息,包括:mode bits, atime, mtime, flags

shutil.copystat(src=,dst=)

 

--4--shutil.copy(src, dst)-----
拷贝文件和权限

shutil.copy(src, dst)

 

--5--shutil.ignore_patterns(*patterns)
shutil.copytree(src, dst, symlinks=False, ignore=None)-----
递归的去拷贝文件

 


--6--shutil.rmtree(path[, ignore_errors[, onerror]])----
递归的去删除文件

 

--7--shutil.move(src, dst)----
递归的去移动文件

 

--8--shutil.make_archive(base_name, format,...)----

创建压缩包并返回文件路径,例如:zip、tar

base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,
如:www =>保存至当前路径
如:/Users/wupeiqi/www =>保存至/Users/wupeiqi/
format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”
root_dir: 要压缩的文件夹路径(默认当前目录)
owner: 用户,默认当前用户
group: 组,默认当前组
logger: 用于记录日志,通常是logging.Logger对象

 

--9--shutil 对压缩包的处理是调用 ZipFile 和 TarFile 两个模块来进行的----

import zipfile

# 压缩
z = zipfile.ZipFile(‘test.zip‘, ‘w‘)
z.write(‘a.log‘)
z.write(‘data.data‘)
z.close()

# 解压
z = zipfile.ZipFile(‘laxi.zip‘, ‘r‘)
z.extractall()
z.close()

import tarfile

# 压缩
tar = tarfile.open(‘your.tar‘,‘w‘)
tar.add(‘WorkSpace/day5/test.zip‘, arcname=‘test.zip‘)
tar.add(‘WorkSpace/day5/test1.zip‘, arcname=‘test1.zip‘)
tar.close()

# 解压
tar = tarfile.open(‘your.tar‘,‘r‘)
tar.extractall() # 可设置解压地址
tar.close()

 

4-2-6 shelve模块

这个模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式。

import shelve

d = shelve.open(‘shelve_test‘) #打开一个文件

class Test(object):
def __init__(self,n):
self.n = n


t = Test(123)
t2 = Test(123334)

name = ["alex","rain","test"]
d["test"] = name #持久化列表
d["t1"] = t #持久化类
d["t2"] = t2

d.close()

 

4-2-7 xml

xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多

xml协议在各个语言里的都 是支持的,在python中可以用以下模块操作xml 

 

import xml.etree.ElementTree as ET

# 解析xml文件
tree = ET.parse("test.xml")
# 获取根
root = tree.getroot()
print(root.tag)

# 遍历xml文档
for child in root:
print(child.tag, child.attrib)
for i in child:
print(i.tag, i.text)

# 只遍历year节点
for i in root.iter("year"):
print(i.tag, i.text)


# 修改和删除xml文件
tree = ET.parse("test2.xml")
root = tree.getroot()

 
二、 python学习之正则:
 

‘.‘ 默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行
‘^‘ 匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r"^a","\nabc\neee",flags=re.MULTILINE)
‘$‘ 匹配字符结尾,或e.search("foo$","bfoo\nsdfsf",flags=re.MULTILINE).group()也可以
‘*‘ 匹配*号前的字符0次或多次,re.findall("ab*","cabb3abcbbac") 结果为[‘abb‘, ‘ab‘, ‘a‘]
‘+‘ 匹配前一个字符1次或多次,re.findall("ab+","ab+cd+abb+bba") 结果[‘ab‘, ‘abb‘]
‘?‘ 匹配前一个字符1次或0次
‘{m}‘ 匹配前一个字符m次
‘{n,m}‘ 匹配前一个字符n到m次,re.findall("ab{1,3}","abb abc abbcbbb") 结果‘abb‘, ‘ab‘, ‘abb‘]
‘|‘ 匹配|左或|右的字符,re.search("abc|ABC","ABCBabcCD").group() 结果‘ABC‘
‘(...)‘ 分组匹配,re.search("(abc){2}a(123|456)c", "abcabca456c").group() 结果 abcabca456c
‘\A‘ 只从字符开头匹配,re.search("\Aabc","alexabc") 是匹配不到的
‘\Z‘ 匹配字符结尾,同$
‘\d‘ 匹配数字0-9
‘\D‘ 匹配非数字
‘\w‘ 匹配[A-Za-z0-9]
‘\W‘ 匹配非[A-Za-z0-9]
‘s‘ 匹配空白字符、\t、\n、\r , re.search("\s+","ab\tc1\n3").group() 结果 ‘\t‘

‘(?P<name>...)‘ 分组匹配 re.search("(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{4})","371481199306143242").groupdict("city") 结果{‘province‘: ‘3714‘, ‘city‘: ‘81‘, ‘birthday‘: ‘1993‘}


 

 
 
 
    

以上是关于初学python之day5的主要内容,如果未能解决你的问题,请参考以下文章

Day5:Python学习笔记之Linux——用户和权限

day5-python之递归与二分法

day5-python之面向过程编程

Python100天学习笔记day5 构造程序逻辑

Python100天学习笔记day5 构造程序逻辑

python-学习笔记之-Day5 双层装饰器 字符串格式化 python模块 递归 生成器 迭代器 序列化