一、文件操作
-python内置了读写文件的函数,用法和c是兼容的
- 操作系统不允许普通的程序直接操作磁盘,所以读写文件就是请求操作系统打开一个文件对象(又称文件描述符),然后通过操作系统提供的接口从这个文件对象操作
1、文件读写()
文件的读写过程为:
- 打开文件
- 向文件中写入内容
- 关闭文件
##2、open文件函数的读写模式 ##
r 以读的方式打开,定位到文件开头 , 默认的 mode
r+ 以读写的方式打开,定位文件开头 , 可以写入内容到文件
w 以写的方式打开,打开文件的时候会清空文件的内容,并且不能读
w+ 以读写的方式打开,定位到文件头,并且打开文件的时候也会清空文件的内容
a 以写的方式打开,定位到文件的末尾,是一个追加的操作 , 但并不允许读
a+ 以读写的方式打开,定位到文件的末尾,追加的方式。
在使用以上 mode 打开文件的时候,如果增加了b 模式,表示以二进制方式打开
3、文件操作_read
1、打开文件
f = open('/tmp/westos89') 以读的方式打开文件,返回一个文件操作
print(f,type(f))
2、操作文件
content = f.read() ##读写所有文件
print(content)
3、每次读写文件的一行内容(读写了全部内容后再执行这个无返回值)
print(f.readline())
print(f.readline())
print(f.readline())
4、返回文件的所有内容,类型为列表
print(f.readlines())
5、批量去掉’\n’
print([line.strip() for line in f.readlines()])
6、关闭文件
f.close()
4、文件操作_write
f = open('/tmp/westos89','w')
f.write('westos') ##写入内容
li = ['java','c','python','php']
lis = [i+'\n' for i in li]
f.writelines(lis) ##写入列表
print(f.writable()) ##判断文件是否可写
f.close() ##关闭文件
5、读取图片
f = open('123.png','rb') #将图片用二进制读的方式打开
res = f.read()
print(res)
f.close()
f1 = open('321.jpg','wb') ##打开一个图片文件,以二进制写的方式,写入321的文件内容,类似于cp
f1.write(res)
f1.close()
6、文件指针移动
f = open('/tmp/passwd')
print(f.readline())
f.seek(offset,whence)
##offset:偏移量
##whence:0:移动指针到文件最开始;1:不移动指针;2:移动指针到文件最后
f.seek(4,0)
# f.seek(0,1)
# f.seek(0,2)
print(f.tell()) ##查看当前指针位置
print(f.readline())
f.close()
二、with语句与文件对象的遍历
1、with语句
pythin2.5以后加入了安全上下文管理器with语句;
当执行完with语句之后会自动清理和关闭文件对象;
with open('/tmp/passwd') as f:
print("with语句中:", f.closed) ##with语句中,文件为打开状态
f.read()
print("with之外:",f.closed) ##with语句外,文件为关闭状态
2、遍历
from collections import Iterable
f = open('/tmp/passwd')
print("文件对象是否可迭代:",isinstance(f,Iterable)) ##判断是否可迭代
for line in f: ##文件对象是可迭代的,默认遍历文件的每一行;读取打文件,使用for循环遍历文件内容即可
print(line)
三、模块对于文件的操作
1、glob模块
import glob
print(glob.glob('/etc/*.conf', recursive=True)) ##查找/etc/下的.conf结尾的文件以列表的方式打开
f = glob.iglob('/etc/*.conf')
print(f) ##以字典的方式打开
print(glob.glob('./*.txt'))
print(glob.glob('**/*.txt', recursive=True))
print(glob.glob('/etc/**/*.conf', recursive=True))
####*表示几级目录,一个*表示一级