文件操作 模块与包 及 异常处理

文件操作:

打开文件有两种方式:
	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"))
OS模块简单演示
#!/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的序列化与反序列化的方法一样!

 

posted @ 2017-09-09 19:48  细雨蓝枫  阅读(174)  评论(0编辑  收藏  举报