(慕课学习笔记)
文件:Python中文件即对象;
linux文件:一切设备都可以看成文件,如:磁盘文件、管道、网络Socket、外设(U盘,SD卡等)等;
文件属性:用户,读、写、执行权限;
1)打开方式
语法:open(name,[,mode[buf]])
说明:name:文件路径; mode:打开方式; buf:缓冲buffering大小;
mode打开方式:
符号 | 说明 |
---|---|
‘r’ | 只读,文件必须存在 |
‘w’ | 只写,不存在则创建,存在则清空内容 |
‘a’ | 追加,不存在则创建 |
‘r+’/’w+’ | 读写 |
‘a+’ | 追加和读写 |
‘rb’,’wb’,’ab’,’rb+’,’wb+’,’ab+’ | 二进制打开 |
2)读取方式
语法:
read([size]):读取文件(读取size个字节,默认读取全部)
readline([size]):读取一行
readlines([size]):读取完文件,返回每一行所组成的列表。size:读取文件io.DEFAULT_BUFFER_SIZE左右内容
iter:使用迭代器读取文件
3)写入方式
语法:
write(str):将字符串写入文件
writelines(sequence_of_strings):写多行到文件,参数为可迭代的对象(元祖或列表等)
#example
f=open(“hello.py”,‘w’)
f.write(“hello”)
f.close()
f.read()
f=open(“hello.py”)
iter_f=iter(f) #使用迭代器不消耗大量内存
lines =0
for line in iter_f:
lines+=1
lines
1)写文件过程:
说明:当文件未关闭时,写入的字符会存放在缓存中,不会直接写入磁盘,当调用close()或者flush()时,才会将内容写入磁盘。
2)Python写磁盘时机
主动调用close()或者flush()方法 将写缓存同步到磁盘
或者写入数据量大于或者等于写缓存,写缓存同步到磁盘上
为什么要关闭?
1)将写缓存同步到磁盘;
2)linux系统中每个进程打开的文件的个数是有限的;
3)如果打开文件数到了系统的限制,再打开文件就会失败.
ps #查看系统进程
cat /proc/20384/limits #查看系统对20384进程所做的限制
file.fileno #打开的文件个数的计数器,超过限制值,打开文件的操作将会失败
list_f=[]
for i in range(1025):
list_f.append(open(“hello.py”,'w'))
print(“%d:%d” % (i,list_f[i].fileno()))
1)写入和读取问题:
写入文件后,必须打开才能读取写入内容;读取文件后,无法重新再次读取读过的内容。
2)文件读取写入文件指针移动过程:
3)文件指针操作
语法:seek(offset[,whence]):移动文件指针
说明:
offset:偏移量,可以为负数;
whence:偏移相对位置;
Python文件指针定位方式:
方法 | 位置 |
---|---|
os.SEEK_SET | 相对文件起始位置0 |
os.SEEK_CUR | 相对文件当前位置1 |
os.SEEK_END | 相对文件结尾位置2 |
#example
f=open(“hello.py”,'r+')
f.tell() #返回当前文件的偏移
f.seek(0,os.SEEK_SET)
f.seek(-5,os.SEEK_CUR) #相对当前位置,向前进5个
1)文件属性
file.fileno():文件描述符
file.mode: 文件打开权限
file.encoding:文件编码格式
file.closed:文件是否关闭
Tips:f.+”Tab补齐” #查看方法
help(f.close)#查看具体方法
2)标准文件
sys.stdin :文件标准输入
sys.stdout:文件标准输出
sys.stderr:文件标准错误
#example
sys.stdin.fileno()
sys.stdout.write('1000') #相当于 print('1000')
3)文件命令行参数
sys.argv :得到命令行参数,是字符串组成的列表
4)文件编码格式
a=unicode encode(u’大家好。’,‘utf-8’)
如何创建一个utf-8或者其他编码格式的文件?
答:使用codecs模块提供的方法创建指定编码格式文件.
语法:open(fname,mode,encoding,errors,buffering):使用指定编码格式打开文件
f=codecs.open(“hello.py”,'w',utf-8)
3)OS模块对文件和目录操作
语法:
os.open(filename,flag[,mode]):打开文件
flag:打开方式
os.O_CREAT #创建
os.O_RDONLY #只读
os.O_WRONLY #只写
os.read(fd,buffersize):读取文件
os.write(fd,string):写入文件
os.lseek(fd,pos,how):文件指针操作
os.close(fd):关闭文件
import os
fd =os.open("imooc.txt",os.O_CREAT | os.O_RDWR)
n=os.write(fd,'imooc')
l=os.lseek(fd,0,os.SEEK_SET)
str1=os.read(fd,5)
os.close(fd)
1)ini配置文件格式
节:[session]
参数(键=值) name=value
import configparser
cfg=configparser.ConfigParser()
cfg.read('1.txt')
cfg.sections() #['user_info', 'study']
for se in cfg.sections():
print(se)
print(cfg.items(se))
''' user_info [('name', 'delia'), ('pwd', '123')] study [('python_1', '11'), ('python_2', '22'), ('python_3', '33')] '''
cfg.set('user_info','pwd','123456') #修改条目
cfg.set('user_info','email','[email protected]') #添加条目
cfg.remove_option('user_info','email')