文件操作
读取文件
open('filename','mode','encoding')
#(文件名,打开格式,打开编码格式)
#python3.0以后版本只有open这个操作文件函数.
在文件I/O中,要在文件中读取数据,程序要先调用系统函数并传送文件名,同时选取一个到达该文件的路径来打开文件.该函数取回一个顺序号,即文件句柄(file handle),该文件句柄对于打开的文件是唯一的识别依据。from 百度百科
fd=open('text.txt')
#把f作为文件句柄,包含文件名,字符串,硬盘内存初始位置.
#f在这里同样作为一个文件迭代器
for line in fd:
print line
fd.close()
#遍历文件每一行.
打开与关闭文件
r:只读打开,文件的默认打开方式
w:文件不存在会创建,存在的话,会覆盖源文件(非追加)
a:只追加模式打开(不能读)
r+: 读写模式(写是追加) —>常用
a+: 追加读写
w+:写读模式(写同样是追加) ---->不常用
rb:二进制读模式(一般用来做网络传输数据的时候,因为网络传输都是基于二进制格式的,所以必须用b) python 2.x 是可以用str传输的
r+b:以二进制读写模式打开
w+b:以二进制写读模式打开
a+b:以二进制追加及读模式打开
b:使用二进制模式(特殊文件需要用文本模式传输的话,建议使用b)
注:
U:表示在读取的时候,可以将‘\r\n’ 转换成 \n (与r或r+模式连用)这样的好处是方便windows上到Linux的使用
因为回车符在windows上表示为\r\n 而Linux上 表示为\n
二进制处理文件不代表文件内容一开始就已经是10010,它仅仅是一个文件的编码形式,str类型文件也可以使用二进制文件来处理,但是我们在写入时必需要先转换成二进制格式.
使用with
使用with关键字可以不关闭文件来打开文件(我也不知道自己在说什么,看例子吧),但是所有打开文件的操作都要缩进,包含在with下面.
这种情况下不需要明确指定close,当出现新代码没有缩进时,文件自动关闭.
with open(r'somefileName') as somefile:
for line in somefile:
print line
# ...more code
使用了 with 语句,不管在处理文件过程中是否发生异常,都能保证 with 语句执行完毕后已经关闭了打开的文件句柄。如果使用传统的 try/finally 范式,则要使用类似如下代码:
somefile = open(r'somefileName')
try:
for line in somefile:
print line
# ...more code
finally:
somefile.close()
比较起来,使用 with 语句可以减少编码量。
此处再介绍
nested 函数
nested 可以将多个上下文管理器组织在一起,避免使用嵌套 with 语句。
with nested(A(), B(), C()) as (X, Y, Z):
# with-body code here
##上下代码基本等价
with A() as X:
with B() as Y:
with C() as Z:
# with-body code here
一句话:有异常发生时,不再抛出异常.
(程序抛出异常可能最后不能关闭文件)
包与模块
模块
我们会把一整个写好了函数的.py文件定义为模块,模块只有被调用或者直接使用两种途径.另外,使用模块时不需要考虑名字与其他模块冲突,但是要区分不同模块.
模块一共三种:
python标准库
第三方模块
应用程序自定义模块
包
为了解决多人个性化编程的重复问题我们引入了包的概念
每个人建立自己的一个独立的文件夹,这个文件夹专门用来存放本人使用的模块.
python Packaget翻译成中文就叫做python包文件
创建一个包文件夹的时候一定会自动创建一个__init__.py文件.
从目录级别来组织模块的,本质上也是被导入的,目录下有 init 文件的都可以理解为包,在import时,其实导入的就是包下的 init.py 文件。
import导入,调用
import os as zhu # 导入时并定义别名,可以在末尾加注释.
import module,module1,module2 # 一次导入多个模块(不建议)
print(os.strftime('%Y-%m-%d %H:%M:%S'))
注意:使用import方式会导入包中的所有函数。使用时注意前缀名,
from导入,调用
from module import func # 调用时可以直接使用func,而不必使用module.func来调用
from module import * # 导入所有函数~
print(func(%Y-%m-%d %H:%M:%S))
PS:func来自哪个文件,那么func内部调用的变量,以其所在文件中的环境变量为准
python内置模块
OS模块~
OS模块简单的来说它是一个Python的系统编程的操作模块,可以处理文件和目录这些我们日常手动需要做的操作,和所在的操作系统版本无关。~
logging模块~
logging模块用于日志的打印记录等,是一个健壮的Python程序所必须具有的模块。
logging模块支持的日志级别主要有五种:DEBUG,INFO,WARNING,ERROR,CRITICAL。优先级为:CRITICAL > ERROR > WARNING > INFO > DEBUG 。 默认的级别为WARNING。Python只会打印比当前级别高的日志,比如我同时刷出了INFO和ERROR级别的日志,如果我的日志级别设置的为WAIRNING,那么只会打印ERROR的日志。~
sys模块~
ys模块负责程序与python解释器的交互,提供了一系列的函数和变量,用于操控python的运行时环境。
sys.path # 列出当前Python环境变量,也就是导入时模块的搜索路径
sys.argv # 类似于shell脚本的$1 $2 ,用于传递命令行参数,使用列表进行传递
sys.stdout.write(‘#’) # 在屏幕上输出,但是不换行,配合for循环,比较适合用来做进度条等
sys.stdout.flush() # 配合sys.stdout.write使用,把每次输出的信息,强制刷新到屏幕上,达到动态的效果~
##
import sys,time
for i in range(20):
sys.stdout.write('=')
sys.stdout.flush()
time.sleep(1)~