Python文件处理

(一)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:使用迭代器读取文件


注意:在使用readline时,当内容大于size大小读取size大小内容,下次再读取时接着上次读取,否则返回全部数据。

在使用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) 返回路径的文件名


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值