Python 学习8 --文件管理&模块与包
来源:互联网 发布:打电话l录音软件 编辑:程序博客网 时间:2024/06/03 18:42
思维导图
文件的管理
文件管理的三大步骤:
- 打开文件; f = open(“filename”)
- 处理文件;
f.read() # 可以读取文件内容
f.write(“hello”) # 不能往文件中写入,因为默认文件以r的模 - 关闭并保存文件; f.close()
文件的几种模式总结:
r模式:
若文件不存在,直接报错;
文件只能读取,不能写入;
w模式:
若文件不存在,直接创建文件;
文件只能写入,不能读取;
打开文件时会清空原有文件内容;
r+模式:
若文件不存在,直接报错;
文件可以读也可以写;
具体写入的内容在哪里,由文件指针(句柄)决定;
w+模式:
若文件不存在,直接创建文件;
文件既能写入也能读取;
打开文件时会清空原有文件内容;
a
若文件不存在,直接创建文件;
文件只能写入,不能读取;
写入的内容直接追加到文件最后;
a+
若文件不存在,直接创建文件;
文件既能写入也能读取;
写入的内容直接追加到文件最后;
b
以二进制的方式打开文件,可以跟r,w,+等组合使用;
文件的读取
read() # 直接读取文件所有内容;
readline() # 每次读取文件一行内容,返回类型为字符串;
readlines() # 读取文件所有内容,以列表形式返回;
xreadlines() # 类似生成器,文件内容不直接以列表方式返回;
文件的写入
write(“str”) # 将字符串写入文件
writelines(“[“hello\n”,”world\n”]”) # 将序列的每个元素写入文件;
文件的其它操作
f.seek(偏移量,选项)
# 偏移量,如果为正数,代表向右偏移;如果为负数,代表向左偏移;
# 选项,如果为0,指针指向文件开始;
如果为1,指针指向当前位置;
如果为2,指针指向文件末尾;
f.flush() # 提交对文件的修改;
文件的几个注意点:
- 文件对象是可迭代数据类型,可以通过for遍历文件的内容;
- with open(“filename”) as f:通过这种方法来避免用户忘记关闭文件的问题;
练习题:
- 显示文件的所有行,但忽略以#开头的行;
#!/usr/bin/env python#coding:utf-8f = open("hello.txt",'r')for line in f.xreadlines(): if line.strip()[0] != "#": print line,f.close()
- 逐页显示文本文件的程序,用户输入一个文件名,每次默认显示行数为10行,给用户一个选项,”是否继续?(Y|N)”
#!/usr/bin/env python#coding:utf-8file = raw_input("FileName:").strip()f = open(file,'r')while True: lines = 0 # 显示文件已经显示行数 for line in range(10): # 每次读取的文件行数 cline = f.readline() if cline: lines += 1 print cline, if lines < 10: print "\n file over!" break choice = raw_input("Continue(Y|N)").upper() if choice == "N": breakf.close()
模块与包的管理
模块
- 模块实质上就是一个以.py结尾的文件,可以被其他py文件调用;
- 导入模块时,会去python的默认搜索路径中寻找;
- python的默认搜索路径sys.path,
- 添加自定义的搜索路径时,sys.path是一个列表,sys.apth.append(“path”);
- sys.path.append(“/home/kiosk/1-Pythonv3/day08/code”)
- sys.path.insert(0,’/home/kiosk’) - 导入一个模块的实质是将模块的文件重新运行一次;
- 导入模块的方法:
import module1,module2
from 模块名 import 函数名
from 模块名 import 函数名 as 函数别名
import 模块名 as 函数别名
包
- 导入一个包的实质是运行包里面的init.py文件;
- 导入包的方法:
import 包名.模块名
from 包名 import 模块名
import 包名(注意init.py函数的内容)
模块分类:
- 内置模块(os,sys,time)- 自定义模块- 第三方模块
常用的内置模块
os , sys , time , datetime , json/pickle , shutil ,random
os
os模块包含普遍的操作系统功能。如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的。
os.name——判断现在正在实用的平台,Windows 返回 ‘nt’; Linux 返回’posix’
os.mkdir()——创建目录
os.makedirs()——递归建立目录
os.remove()——删除指定文件
os.chdir()——改变目录到指定目录
os.getcwd()——得到当前工作的目录
os.listdir()——指定所有目录下所有的文件和目录名
os.path.isfile()——判断指定对象是否为文件;是返回True,否则False
os.path.isdir()——判断指定对象是否为目录;是返回True,否则False
os.path.split()——返回路径的目录和文件名
os.system()——执行shell命令
os.path.join(path, name)——连接目录和文件名
os.path.basename(path)——返回文件名
os.path.dirname(path)——返回文件路径
sys
sys 模块提供了许多函数和变量来处理 Python 运行时环境的不同部分
sys.argv() : 在外部向程序内部传递参数
sys.exit(n) :执行到主程序末尾,解释器自动退出,但是如果需要中途退出程序,可以调用sys.exit函数,带有一个可选的整数参数返回给调用它的程序,表示你可以在主程序中捕获对sys.exit的调用。(0是正常退出,其他为异常)
sys.path :环境变量,即获取指定模块搜索路径的字符串集合(显示的信息实际为一个列表,可以通过append()命令增加搜索目录)
sys.modules : sys.modules是一个全局字典,该字典是python启动后就加载在内存中。每当程序员导入新的模块,sys.modules将自动记录该模块。当第二次再导入该模块时,python会直接到字典中查找,从而加快了程序运行的速度。它拥有字典所拥有的一切方法。
sys.getdefaultencoding() : 获取系统当前编码,一般默认为ascii。
sys.setdefaultencoding() : 设置系统默认编码,执行dir(sys)时不会看到这个方法,在解释器中执行不通过,可以先执行reload(sys),在执行setdefaultencoding(‘utf8’),此时将系统默认编码设置为utf8。(见设置系统默认编码 )
sys.getfilesystemencoding() : 获取文件系统使用编码方式,Windows下返回’mbcs’,mac下返回’utf-8’.
sys.platform: 获取当前系统平台。
sys.stdin,sys.stdout,sys.stderr: stdin , stdout , 以及stderr 变量包含与标准I/O 流对应的流对象. 如果需要更好地控制输出,而print 不能满足你的要求, 它们就是你所需要的. 你也可以替换它们, 这时候你就可以重定向输出和输入到其它设备( device ), 或者以非标准的方式处理它们
time
在实际的编程中我们要经常与时间打交道,所以time模块是非常有用的,在python中,对时间的处理并不只有time,还有datetime和calendar,locale。
time.localtime([secs]) :将一个时间戳转换为当前时区的struct_time。secs参数未提供,则以当前时间为准。
time.time():返回当前时间的时间戳。
time.gmtime([secs]):和localtime()方法类似,gmtime()方法是将一个时间戳转换为UTC时区(0时区)的struct_time。
time.mktime(t):将一个struct_time转化为时间戳。
time.mktime(time.localtime())1304576839.0
- time.sleep(secs):线程推迟指定的时间运行。单位为秒。
time.clock():这个需要注意,在不同的系统上含义不同。在UNIX系统上,它返回的是“进程时间”,它是用秒表示的浮点数(时间戳)。而在WINDOWS中,第一次调用,返回的是进程运行的实际时间。而第二次之后的调用是自第一次调用以后到现在的运行时间
import time if __name__ == '__main__': time.sleep(1) print "clock1:%s" % time.clock() time.sleep(1) print "clock2:%s" % time.clock() time.sleep(1) print "clock3:%s" % time.clock()
运行结果:
clock1:3.35238137808e-006
clock2:1.00005142763
clock3:2.00011843636
其中第一个clock()输出的是程序运行时间
第二、三个clock()输出的都是与第一个clock的时间间隔
- time.asctime([t]):把一个表示时间的元组或者struct_time表示为这种形式:’Sun Jun 20 23:21:05 1993’。如果没有参数,将会将time.localtime()作为参数传入。
time.asctime()'Thu May 5 14:55:43 2011'
- time.ctime([secs]):把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。如果参数未给或者为None的时候,将会默认time.time()为参数。它的作用相当于time.asctime(time.localtime(secs))。
time.ctime()'Thu May 5 14:58:09 2011'
time.ctime(time.time())'Thu May 5 14:58:39 2011'
time.ctime(1304579615)'Thu May 5 15:13:35 2011'
datetime
datetime模块提供对于日期和时间进行简单或复杂的操作. datetime 模块提供了以下的可用类型
datetime模块定义了两个常量:datetime.MINYEAR和datetime.MAXYEAR,分别表示datetime所能表示的最小、最大年份。其中,MINYEAR = 1,MAXYEAR = 9999。
- datetime.date: 一个理想化的日期, 提供year, month, day属性
- datetime.time: 一个理想化的时间, 提供hour, minute, second, microsecond, tzinfo.
- datetime.datetime: 日期和时间的组合.提供year, month, day, hour, minute, second, microsecond, tzinfo.
- datetime.timedelta: 表达两个date,time和datetime持续时间内的微妙差异.
- datetime.tzinfo: 时间对象的抽象基类.
json/pickle
json和pickle模块,两个都是用于序列化的模块
json模块,用于字符串与python数据类型之间的转换
pickle模块,用于python特有类型与python数据类型之间的转换
两个模块,都提供了dumps,dump,loads,load 4个功能
json.loads() : loads 由字符串转其他数据类型
json.load() : 将文档(内部是字符串格式)转换成python的其他数据类型
json.dumps() : 将字典、列表、元组 转换成字符串格式
json.dump() : 将字典、元组、列表转换成字符串格式并写入文档
注意 dump load 不要一起运行,会报错,一步一步来
shutil
在看django和scrapy源码的时候,可以看见他会有一个模式,即先有一些模块文件,在他的源码中,当你使用他规定的命令的时候,就会复制这些文件,来生成你要的模板文件。这里就是用了python自带的shutil模块。
shutil.copyfile( src, dst) : 从源src复制到dst中去。当然前提是目标地址是具备可写权限。抛出的异常信息为IOException. 如果当前的dst已存在的话就会被覆盖掉
shutil.move( src, dst) : 移动文件或重命名
shutil.copymode( src, dst) : 只是会复制其权限其他的东西是不会被复制的
shutil.copystat( src, dst) : 复制权限、最后访问时间、最后修改时间
shutil.copy( src, dst) : 复制一个文件到一个文件或一个目录
shutil.copy2( src, dst) : 在copy上的基础上再复制文件最后访问时间与修改时间也复制过来了,类似于cp –p的东西
shutil.copy2( src, dst) : 如果两个位置的文件系统是一样的话相当于是rename操作,只是改名;如果是不在相同的文件系统的话就是做move操作
shutil.copytree( olddir, newdir, True/Flase) :
把olddir拷贝一份newdir,如果第3个参数是True,则复制目录时将保持文件夹下的符号连接,如果第3个参数是False,则将在复制的目录下生成物理副本来替代符号连接shutil.rmtree( src ) : 递归删除一个目录以及目录内的所有内容
random
random模块用于生成随机数
random.random() : 用于生成一个0到1的随机符点数: 0 <= n < 1.0
random.uniform(a, b) : 用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限。如果a > b,则生成的随机数n: a <= n <= b。如果 a < b, 则 b <= n <= a。
random.randint()的函数原型为:random.randint(a, b),用于生成一个指定范围内的整数。其中参数a是下限,参数b是上限,生成的随机数n: a <= n <= b
random.randrange([start], stop[, step]) : 从指定范围内,按指定基数递增的集合中 获取一个随机数。如:random.randrange(10, 100, 2),结果相当于从[10, 12, 14, 16, … 96, 98]序列中获取一个随机数。random.randrange(10, 100, 2)在结果上与 random.choice(range(10, 100, 2) 等效。
random.choice(sequence)。参数sequence表示一个有序类型。这里要说明 一下:sequence在python不是一种特定的类型,而是泛指一系列的类型。list, tuple, 字符串都属于sequence。
random.shuffle(x[, random]) : 用于将一个列表中的元素打乱
random.sample(sequence, k) : 从指定序列中随机获取指定长度的片断。sample函数不会修改原有序列。
进程管理
练习:读取负载信息
分析:
/proc文件系统是一个虚拟的文件系统,不占用磁盘空间,它反映了当前操作系统在内存中的运行情况,查看/proc下的文件可以聊寄到系统的运行状态。查看系统平均负载使用“cat /proc/loadavg”命令,输出结果如下:
0.27 0.36 0.37 4/83 4828/
前三个数字大家都知道,是1、5、15分钟内的平均进程数(有人认为是系统负荷的百分比,其实不然,有些时候可以看到200甚至更多)。后面两个呢,一个的分子是正在运行的进程数,分母是进程总数;另一个是最近运行的进程ID号。
程序
#!/usr/bin/env python import osdef load_stat(): loadavg = {} f = open("/proc/loadavg") con = f.read().split() f.close() loadavg['lavg_1']=con[0] loadavg['lavg_5']=con[1] loadavg['lavg_15']=con[2] loadavg['nr']=con[3] loadavg['last_pid']=con[4] return loadavgprint "loadavg",load_stat()['lavg_15']
运行结果
练习:
备份/home目录,备份的包名称为homeback_YY_MM_DD.tar.gz
程序:
import shutilimport timeshutil.make_archive('homeback%s'%(time.strftime('%Y_%m_%d')),'gztar','/home')print 'homeback%s'%(time.strftime('%Y_%m_%d'))print time.strftime('%Y_%m_%d')
运行结果:
- Python学习笔记 8--文件的管理、模块与包
- Python 学习8 --文件管理&模块与包
- python文件管理与模块
- Python学习之模块与包
- python 包 模块 文件
- python模块与包
- Python 模块与包
- python 模块与包
- python 模块与包
- python模块与包
- python模块与包
- python---模块与包
- python-模块与包
- python 模块与包
- Python-------模块与包
- Python学习笔记(12)-Python模块与包示例
- Python学习day07 文件管理、mysql-python及常用模块
- Nodejs学习 3 -- module模块系统与npm包管理
- 关于activiti驳回等功能的封装
- Stm 32 IAP 在线 升级IAP 的 操作
- DevOps的常见迷思
- krpano 功能化 -- linux 部署
- Windows下Nginx的启动、停止等命令
- Python 学习8 --文件管理&模块与包
- Android studio如何设置java类的File Head
- i2c-test tool summary
- oracle with sql优化
- Ruby 集合指南(2):Hashes、Sets 和 Ranges
- 面试题(一)
- CentOS6.5安装Python2.7和Pip
- CoreException: Could not get the value for parameter compilerId for plugin execution default-compil
- Swagger使用及Springfox+SpringBoot访问http://localhost:8080/swagger-ui.htmlui404