(一)python文件基础操作
大概内容:文件概念,文件打开方式,文件读写操作,文件指针,文件对象属性,os模块文件操作
文件:python中文件是对象
Linux文件:一切设备都可以看成文件
例如:磁盘文件,管道,网络Socket,外设等
文件属性:用户,读,写,执行权限。
1.1 python文件操作之文件打开方式
文件打开:open(name[,mode[buf]])
name:文件路径
mode:打开方式
buf:缓冲buffering大小
文件读取方式:
read([size]):读取文件(读取size个文件,默认读取全部),当文件大于设置的size则只读取size个,否则读取全部。
readline([size]):读取一行
readlines([size]):读取完文件,返回每一行所组成的列表
文件写入方式:
write(str):将字符串写入文件
writelines(sequence_of_strings):写多行到文件(sequence_of_strings是一个由字符串组成的list)
python文件打开方式
mode 说明注意
'r' 只读方式打开文件必须存在
'w' 只写方式打开文件不存在创建,文件存在则清空文件内容
'a' 追加方式打开文件不存在创建文件
'r+'/'w+' 读写方式打开 'w+'同样会清空之前的文件
'a+' 追加和读写方式打开
'rb','wb','ab','rb+','wb+','ab+':二进制方式打开
1.2文件读取方式
read([size]):读取文件(读取size个文件,默认读取全部)
readline([size]):读取一行
readlines([size]):读取完文件,返回每一行所组成的列表
iter:使用迭代器读取文件
在使用readlines时,size大小并不是指能够取得的文件大小,起作用的是io.DEFAULT_BUFFER_SIZE(8192)缓冲区的大小(黑人问号)
栗子:
f=open("111.txt")
iter_f =iter(f)
lines=0
for line in iter_f:
lines+=1
print(lines)
1.3 python文件写入方式
write(str):将字符串写入文件
writelines(sequence_of_strings):写多行到文件,参数为可迭代的对象(字符串,或字符串组成的元组等)
注意:当我们没有关闭文件时,我们写的数据是没有写进文件的
python写过程与存在问题
写文件过程:
f.write('imooc')被python解释器解释然后系统调用写函数,内核会将文件写到缓冲区,当关闭文件的时候内核会将文件写入到磁盘。这个过程写和存数据不同步,存在写缓存。
python写入磁盘时机:
1:主动调用close()或者flush方法,写缓存同步到磁盘
2,写入数据量大于或者等于写缓存,写缓存同步到磁盘
当写入的数据大于缓存的时候,会把满的数据写入到磁盘,当调用close()函数和flush()函数时候,剩余的数据会写入到磁盘
1.4 python文件关闭
python文件为什么要关闭
1,将写缓存同步到磁盘
2,Linux系统中每个进程打开文件的个数是有限的
3,如果打开文件数到了系统限制,再打开文件就会失败
查看进程运行打开最大文件数 cat /proc/PID/limits
1.5 python文件指针
1,写入文件后,必须打开才能读取写入内容
2,读取文件后,无法重新再次读取读过的内容
文件读取写入文件指针移动过程:
当打开文件时,指针指向第一个字节,按照读取个数依次往后推移,不会自动归零。
python文件指针操作:
seek(offset[,whence]):移动文件指针
offset:偏移量,可以为负数
whence:偏移相对位置
python文件指针定位方式:
os.SEEK_SET:相对文件起始位置 值为 0
os.SEEK_CUR:相对文件当前位置 值为 1
os.SEEK_END:相对文件结尾位置 值为 2
使用f.tell()获取当前指针偏移量。
在python3中想要偏移量为负值,需要以二进制方式打开文件。
(二)文件属性及OS模块使用
内容:文件对象属性,标准文件,文件命令行参数,文件编码格式
文件属性:
file.fileno():文件描述符
file.mode:文件打开权限
file.encoding:文件编码格式
file.closed:文件是否关闭
标准文件:
文件标准输入:sys.stdin
文件标准输出:sys.stdout
文件标准错误:sys.stderr
当我们使用input()时候相当于调用sys.stdin.read
当我们使用print()时候相当于调用sys.stdout.write
文件命令行参数:
sys模块提供sys.argv属性,通过该属性可以得到命令行参数
sys.argv:字符串组成的列表
文件编码格式
a=unicode.encode(u'你好','utf-8')
使用codecs模块提供方法创建指定编码格式文件
open(fname,mode,encoding,errors,buffering)使用编码格式打开文件
Linux文件系统
文件包括:磁盘(ext2,ext4)文件,NFS文件系统,各种外设(sd卡,USB设备)等
Linux如何来管理外设,为应用层通过统一接口?
linux系统简单分为系统层(应用层)和底层(内核)。硬件包括CPU,硬盘等。
首先每一个外设在内核中都有一个驱动程序,内核将这些接口虚拟封装为虚拟文件系统,每一个外设在文件系统下生成一个文件节点(即我们所说的文件),这些文件节点具有统一的操作方式,这些操作方式可以通过系统调用的方式对文件节点进行访问,这样可以把所有的外设使用文件处理。
使用os模块打开文件
os.open(filename,flag[,mode]) 打开文件
flag:打开文件方式
os.O_CREAT:创建文件
os.O_RDONLY:只读方式打开
os.O_WRONLY:只写方式打开
os.O_RDWR:读写方式打开
以上返回的是一个文件描述符
os.read(fd,buffersize):读取文件 fd是文件描述符,buffersize是读取文件大小
os.write(fd,string):写入文件 string是写入的数据
os.lseek(fd,pos,how):文件指针操作
os.close(fd):关闭文件
栗子:
fd=os.open('zlll.txt',os.O_CREAT|os.O_RDWR)
n=os.write(fd,'bfuvndj')
l=os.lseek(fd,0,os.SEEK_SET) #指针当前位置
str1=os.read(fd,5)
os.close(fd)
os更偏向于底层
os模块方法介绍
os方法 说明·
access(path,mode) 判断该文件权限:F_OK存在。权限:R_OK,W_OK,X_OK
listdir(path) 返回当前目录下所有文件组成的列表
remove(path) 删除文件
rename(old,new) 修改文件或者目录名
mkdir(path[,mode]) 创建目录
makedirs(path[,mode])创建多级目录
removedirs(path) 删除多级目录 #os.removedirs('test/test1/test2/')
removedir(path) 删除一个空目录
os.path模块方法介绍
os.path方法 说明·
exists(path) 当前路径是否存在
isdir(s) 是否是一个目录
isfile(path) 是否是一个文件
getsize(filename) 返回文件大小
dirname(p) 返回路径的目录 #os.path.basename('./1.sql')
basename(p) 返回路径的文件名