文件操作
标准输入和标准输出
输入(raw_input/input)—> 程序处理 —> 输出(print)
- 操作系统不允许普通的程序直接操作磁盘,所以,读写文件实质是请求操作系统打开一个文件对象(文件描述符),然后,操作系统提供的接口,通过文件对象操作文件。
管理文件的步骤
- 打开文件
f = open(“filename”) #创建文件对象f,type(f)=file,可迭代,若文件不存在,open()函数抛出IOError - 处理文件
f.read() # 读取文件所有内容
f.write(“hello”) # 不能往文件中写入,因为默认文件以r的模式打开; - 关闭并保存文件
f.close() #释放系统资源
文件的基本操作
文件的打开f = open (“path”,”mode”)
- r 模式
以读的方式打开,定位到文件开头 , 默认的 mode。文件不存在直接报错,文件只能读取,不能写入。 - r+模式
以读写的方式打开,定位文件开头 , 可以写入内容到文件 - w 模式
以写的方式打开,打开文件的时候会清空文件的内容,并且不能读 - w+模式
以读写的方式打开,定位到文件头,并且打开文件的时候也会清空文件的内容 - a模式
以写的方式打开,定位到文件的末尾,是一个追加的操作 , 但并不允许读 - a+模式
以读写的方式打开,定位到文件的末尾,追加的方式。
注:在使用以上 mode 打开文件的时候,如果增加了b 模式,表示以二进制方式打开
文件的读取f.read()
如果文件打开成功,接下来,调用 read() 方法可以一次读取文件的全部内容;
文件的关闭f.close()
文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源
文件的其他操作
- f.flush()函数,他将缓冲区中的内容写入到硬盘中
- f.seek(offset[,whence]),函数,offset表示移动多少字节,大于零向右偏,小于零向左偏。whence为1的时候表示相对于当前位置移动的,当是2的时候从文件的末尾往后移动,但不一定所有的平台都支持;为0的时候表示从开头往后移动.
- fileno()函数,返回当前的文件描述符,一个数字
- isatty()函数,当前打开的文件是否是一个终端设备,close属性,当前文件是否关闭返回True,False。
练习
#显示文件中所有的行,但忽略以#号开头的行。
f = open("world.md","a+")
for i in f :
i = i.strip()
if not i.startswith("#"):
print i
f.close()
#下面为更高级一点的代码,在这段程序执行完毕之后自动关闭文件
with open("world.md","a+") as f :
for i in f :
i = i.strip()
if not i.startswith("#"):
print i
模块
模块的实质
- 模块实质上就是一个以.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 sys
print sys.path
#这两行代码就可以打印出导入模块的路径
导入模块的方法
import module1,module2
from 模块名 import 函数名
from 模块名 import 函数名 as 函数别名
import 模块名 as 函数别名
模块的分类
- 内置模块(os,sys,time)
- 自定义模块
- 第三方模块 #开源
常用的内置模块
os,sys,time,datetime,json/pickle,shutil,random
包
- 导入一个包的实质是运行包里面的init.py文件;
- 导入包的方法:
import 包名
from 包名 import 模块名
import 包名 - 常用的几种方式
1)调用模块:from 包 import 模块
访问:模块.函数()
2)调用模块:import 模块
访问:包.模块.函数()
练习
- 实现队列的基本操作
#!/bin/python
class MyQueue(object):
def __init__(self):
self.queue = []
def push(self,value):
self.queue.append(value)
def pop(self):
if not self.queue == []:
self.queue.pop(0)
else:
print "Empty"
def isEmpty(self):
return self.queue ==[]
def show(self):
for i in self.queue:
print i,
q = MyQueue()
print "zheng zai ru dui"
q.push(1)
q.push(2)
q.push(3)
print "nei ront "
q.show()
print "\nzheng zai chu dui"
q.pop()
print "nei rong"
q.show()