文件操作 模块与包 及 异常处理
文件操作:
打开文件有两种方式:
1、直接打开,需要手动关闭
f = open("文件路径","操作方式","编码类型encoding=")
f.close()
2、with 打开,不用考虑关闭文件的问题!
with open("文件路径","操作方式","编码类型encoding=") as f:
文件常用操作模式:
r 读 只读 读取文件内容
w 写 直接写入会覆盖原文件中的内容! 若文件内有内容,文件刚打开的时,会将之前的内容清掉,如果没有文件的话,会先创建一个文件,再在里边儿写入内容!
如果文件不关,内容可以一直被写入进去!
a 追加 在光标位置后边进行追加
文件操作:
f.read() #默认直接读取文件内全部内容
f.read(n) #指定读取n个字节的内容
f.readlines(n) #读取文件每一行的内容,列表格式 n 代表读取多少行
f.readline(n) #只读一行内容 n代表读取多少字节
f.write() 写入内容 (写的方式根据文件操作类型决定)
f.weitelines() 写入多行
调整光标的位置 f.seek(0) #将光标移到开始位置!不同于read()方法,是按照字节来移动的。
f.seek(1,0)从光标的开始位置往后读取
f.seek(3,1)从当前位置往后读取
f.seek(-3,2)从最后位置往前读取
# 该模式一定按字节操作!
显示多少字节 f.tell()
可读可写模式 r+ w+ a+
r+ 光标位置,追加写入
w+ 打开文件的时候,先把之前文件内容清掉,然后再写入内容,
a+ 总是在最后位置添加! 光标直接到最后位置,直接读取读不到任何东西
rb wb ab 二进制操作(字节形式)
rb 直接将磁盘中的字节数据放到内存,不需要解码。
wb及ab与rb意思相同,同样的都是将数据以字节的方式写读,不经过解码。
注意点:
当对已经关闭的文件或是有内容的文件更改时,当前的所有操作均不支持在源文件上修改。正确的操作方式是:重新再打开一个新的文件,把原文件及要修改的文件写入。操作完成之后重命名文件。
针对大文件读取:
1、 def read_in_chunks(filePath, chunk_size=1024*1024): file_object = open(filePath) while True: chunk_data = file_object.read(chunk_size) if not chunk_data: break yield chunk_data if __name__ == "__main__": filePath = './path/filename' for chunk in read_in_chunks(filePath): print(chunk) 2、 with open (filePath,"r") as f: for line in f: print(line) 3、 #fileinput模块处理 import fileinput for line in fileinput.input(["filePath"]): print(line)
模块与包:
关于包:必须带__init__.py 文件 basepath = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) #以字符串的形式导入模块的方法 import importlib importlib.import_module(字符串)
摘要算法:hashlib 模块
md5()方法
import hashlib
m = hashlib.md5() #使用md5方法
m.update('hello'.encode('utf-8')) #传入字节数据,加密
print(m.hexdigest()) #1打印6进制的摘要算法结果
正则 re
1.正则表达式(元字符):只对字符串进行操作
1)操作 一个字符
通配符 点 . 可以替换除了换行符(\n)所有字符, 通配符(一个字符)没有跳过之说。
2)操作 重复字符(操作元字符前的一个字符)
* 代表:0到无穷次
+ 代表:1到无穷次
? 代表:0到1次
{} {r,m}代表:有r-m次
\d 代表:0-9 的 数字
[] 字符集 中括号内的字符是或的关系,只要匹配到其中一个就可以。
在字符集中还要注意:*,+ . 等元字符都代表的是普通符号, 而 - ^ \
[^2] 字符集内的 ^ 是取反的意思。及除字符集内的条件其他的都符合,[\d] 表示的还是数字!
3)有特殊意义的字符:
- 代表:什么到什么 的意思 例如:[1-9]
^ 开始匹配 从字符串开始位置匹配
$ 结尾匹配 从字符串结尾位置匹配
() 分组 优先匹配分组的内容
(?:内容) 表示取消分组的优先级
| 管道符 表示 或的意思
\ 转义符 将有意义的符号转成无意义的,将无意义的转换成有意义的
1、后面加上一个元字符使其变成普通符号 比如:\. \*
2、将一些普通符号变成特殊符号 比如:\d \w
2、re方法
re.findall(pattern , string) 找到所有的匹配元素,返回列表
re.finditer() #将拿到的东西整成一个可迭代的对象
re.search; 只匹配第一个结果,匹配到就不再向下匹配,返回一个内存地址,通过.group()的方式获取匹配的字符串
re.match:只在字符串开始的位置匹配
re.split(规则,字符串) 分割 以前边的规则表达式为条件分隔符,对字符串进行分割!可在后边限制分割次数
re.sub() 替换
ret4 = re.sub(规则,替换内容,原字符串,次数) 返回一个字符串
re.subn() 替换 返回一个元组(内容,替换次数)
re.compile(规则) 编译规则
c = compile('\d+') 可操作多个字符串
ret5 = c.findall('hello32world')
print(ret5)
正则表达式—修饰符
正则表达式可以包含一些标志修饰符来控制匹配模式,用在正则表达式处理函数中的flag参数中,为可选参数。
(1) re.I 全写(re.IGNORECASE)
表示使匹配时,忽略大小
(2) re.M 全写(re.MULTILINE)
多行匹配,影响 ^ 和 $的行为
(3) re.S 全写(re.DOTALL)
使点(.)匹配包括换行在内的所有字符
(4) re.X 全写(re.VERBOSE)
这个模式下正则表达式可以是多行,忽略空白字符,并可以加入注释。
(5) 除以上标志外还有re.L和re.U,但不常用
(6) 可以通过使用运算符“|“来指定多个标志,表示同时生效。

os,sys模块
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 输出用于分割文件路径的字符串 win下为;,Linux下为:
os.name 输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
os.system("bash command") 运行shell命令,直接显示
os.environ 获取系统环境变量
os.walk("path") 递归的获取,某目录下的文件绝对路径,文件夹和文件;注意点:文件夹和文件会以列表的形式存储。
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所指向的文件或者目录的最后修改时间
os.path.getsize(path) 返回path的大小
sys模块:与解释器交互
sys.argv 命令行参数List,第一个元素是程序本身路径
sys.exit(n) 退出程序,正常退出时exit(0)
sys.version 获取Python解释程序的版本信息
sys.maxint 最大的Int值
sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform 返回操作系统平台名称
import os # print(os.getcwd()) #获取当前工作目录 绝对路径 # # f = open("test.txt","w") # os.chdir(r"") #切换工作路径,参数为绝对路径 # # print(os.curdir) #返回当前目录 打印结果:. # print(os.pardir) 获取当前目录的父目录 .. # os.makedirs("aa/bb") #在当前文件递归创建目录文件 # # os.makedirs("aaa/bbb") #在当前文件递归创建目录文件 # os.removedirs("aaa/bbb") #递归删除多层文件,只会删空目录! # # os.mkdir("ss") #在当前路径下创建一个名为ss的文件 # os.rmdir("ss") #在当前路径下删除一个名为ss的文件 # # print(os.listdir(r'文件夹绝对路径')) #查看该文件夹下有都有那些文件。 # print(os.stat(r"文件的绝对路径")) #获取文件的具体信息,文件的修改时间和创建时间,文件大小 # # print(os.sep) #路径分隔符,根据系统选定 # print(os.linesep) #行终止符, # print(os.pathsep) #路径分隔符, # print(os.name) #操作系统的名字,判断当前操作平台 # # print(os.system("交互式操作命令")) #代码调用交互式命令,相当于在cmd上执行命令, # # print(os.system("dir")) # # os.environ() #获取系统环境变量 # # print(os.path.abspath("文件名")) #获取文件名的绝对路径 # # print(os.path.abspath("test.txt")) #获取文件名的绝对路径 # print(os.path.basename("文件的绝对路径")) #获取绝对路径下 文件的名字 # print(os.path.dirname("文件的绝对路径")) #获取绝对路径下 文件的路径 # # os.path.exists("路径") #判断路径是否存在,返回True;如果path不存在,返回False # os.path.isabs("目录路径") #如果目录路径(路径内不包含文件名)是绝对路径,返回True # os.path.isfile("文件绝对路径") #如果path是一个存在的文件,路径内必须有文件,返回True。否则返回False # os.path.isdir("目录文件名") #如果path是一个存在的目录,则返回True。否则返回False # #os.path.join(path1[, path2[, ...]])路径拼接,可以有多个文件 #将多个路径组合后返回,第一个绝对路径之前的参数将被忽略 # os.path.getatime("目录或文件的绝对路径") #返回path所指向的文件或者目录的最后存取时间 # os.path.getmtime("目录或文件的绝对路径") #返回path所指向的文件或者目录的最后修改时间 # os.path.getsize("路径") #返回path的大小 abse = os.path.abspath(__file__) #获取当前文件的绝对路径 mul = os.getcwd() #获取当前文件目录 #判断是否是正确的路径 # print(os.path.exists(abse)) # print(os.path.exists(mul)) #判断目录的路径是否 是绝对路径 # print(os.path.isdir(abse)) # print(os.path.isdir(mul)) #判断一个文件路径或是文件 是否存在, # print(os.path.isfile(abse)) # print(os.path.isfile("test.py")) # print(os.path.isfile(mul)) #判断 当前路径或文件夹名 是否存在,路径内如果包含了文件名那就不是。 print(os.path.isdir(abse)) print(os.path.isdir(mul)) print(os.path.isdir("static"))
#!/usr/bin/python #coding:utf8 import os def listdir(path,fileslist): #传入存储的list for file in os.listdir(path): file_path = os.path.join(path,file) if os.path.isdir(file_path): listdir(file_path,fileslist) else: fileslist.append(file_path) return fileslist print dirlist("/home/testdir", [])
for root,dirs,files in os.walk("path")
print(root,dirs,files)
异常处理:
语法: try: 被监测的代码块 except Exception as e: #万能异常 print(e) or pass 异常操作 else: 没有异常时触发 finally: 有没有异常都触发
#举例说明
try:
print("=---->")
print(x)
print("-=--->")
except NameError as x:
print(x)
except Exception as y:
print(y)
else:
print("try内代码块没有异常则执行!")
finally:
print("无论异常与否,都会执行该模块,通常是进行清理工作")
print("继续执行其他操作!")
#执行结果:
=---->
name 'x' is not defined
无论异常与否,都会执行该模块,通常是进行清理工作
继续执行其他操作!
python内部序列化转换方法:pickle,方法与json的序列化与反序列化的方法一样!
浙公网安备 33010602011771号