您的位置:首页 > 编程语言 > Python开发

Python文件处理

2015-12-18 09:50 666 查看

Python文件处理

文件简介

1.简介
文件:Python中文件是对象

LINUX文件:一切设备都可以看成文件,如磁盘文件、管道、网络socket、外设等

文件属性:用户,读写执行权限

2.Python文件基础操作

2.1文件打开方式
打开方法:open(name[,mode[buf]])

name:文件路径

mode:打开方式

Mode

说明

注意

r

只读方式打开

文件必须存在

w

只写方式打开

文件不存在就创建

文件存在则清空文件内容

a

追加方式打开

文件不存在则创建

r+/w+

读写方式打开

 

a+

追加和读写方式打开

 

rb、wb、ab、rb+、wb+、ab+:二进制方式打开

 

buf:缓冲buffering大小

返回值:文件对象,有如下方法:

 


2.2文件读取方式
读取方式:

1)read([size]):读取文件(读取size个字节,若文件大小大于size则读取size,若文件小于size则读完,默认读取全部)

2)readline([size]):读取一行,size同上

3)readlines([size]):读取io.default_bufer_size左右文件,返回每一行所组成的列表,弊端是文件很大,就会占用很大空间

此时的size,是 在io.default_bufer_size.设置的值左右大小的内容

如果要读取整个文件则用迭代器方式,iter:并不是把整个文件都放在内存中,而是在每次for的时候去读取。



2.3文件写入与写缓存
文件写入方式:

1)write(str):将字符串写入文件

2)writelines(sequence_of_strings):写多行到文件,参数为可迭代的对象,可以是字符串,字符串组成的元组,字符串组成的迭代器,字符串组成的列表

注意:写入的时候因为linux有写缓存机制,所以如果不调用close或者flush是不会写到磁盘上去的

写不一致问题的解决方法:

1.主动调用close或者flush方法,写缓存同步到磁盘;

2.写入数据量大于或者等于写缓存,写缓存同步到磁盘,但是size-bufer的那部分还是不会同步过去的

 

 

2.4文件关闭
1,将缓存同步到磁盘

2.linux系统中每个进程打开文件的个数是有限的

3.如果打开文件数到了系统限制,再打开文件就会失败

举例:

1)查看当前的进程



2)看一下进程打开文件的限制在哪儿



3)查看



 

fileno:指文件的描述符,每打开一个文件,其fileno就会累加

列表保存文件对象

2.5文件指针
文件读取写入存在的问题:

1.写入文件后,必须打开才能读取写入的内容

2.读取文件后,无法重新再次读取读过的内容

文件读取的过程:






如何对文件指针进行操作呢?使用seek

seek(offset[,whence]):移动文件指针:

       offset:偏移量,可以为负数

       whence:偏移相对位置

              os.SEEK_SET:相对文件起始位置  0

              os.SEEK_CUR:相对文件当前位置  1

              os.SEEK_END:相对文件结尾位置  2

f.tail()返回文件当前的偏移

f.seek(0,os.SEEK_END):将文件指针定位到文件结尾

f.seek(-5,0s.SEEK_CUR):相对于当前位置之前的5个字节

如果文件的偏移大于文件的长度:就会返回Invalid argument:的错误

s.seek(-18,os.SEEK_CUR):

就会返回Invalidargument:的错误

3.文件属性及OS模块使用

 

3.1文件属性编码格式
普通文件属性:

file.fileno():文件描述符

file.mode:文件打开权限

file.encoding:文件编码格式,返回值若为空则为ASC码格式

file.closed:文件是否关闭

执行以上函数前必须要先打开文件



标准文件:

标准输入文件:sys.stdin

标准输出文件:sys.stdout

标准错误文件:sys.stderr

调用的时候要首先导入sys模块



 




文件命令行参数:执行程序时,如果能根据参数不同完成不同功能

sys模块提供sys.argv属性,通过该属性可以得到命令行参数;

sys.argv:字符串列表,可以接收n个参数





 

文件的编码格式:

使用普通的方式打开文件:写入u“慕课”,出现的问题



解决办法:先将Unicode转换为utf-8


 

如何创建一个utf-8后者其他编码格式的文件呢?

使用codecs模块提供方法创建指定编码格式文件:

open(fname.mode,encoding,errors,buffering):默认是rb方式打开

使用:首先要引入模块



3.2Linux文件系统简介
Linux文件包括:磁盘(ext2,ext4)文件,NFS文件系统,各种外设(sd卡,USB设备)

Linux是如何来管理外设,为应用层提供统一接口,管理接口?

 


3.3OS模块对文件和目录操作
OS提供的模块更加偏向于Linux系统调用

1)打开文件:

os.open(filename,flag[,mode])

flag:打开文件的方式    os.O_CREAT  创建文件

                                   os.O_RDONLY只读方式打开

                                   os.O_WRONLY只写方式打开

                                   os.O_RDWR  读写方式打开

2)读取文件:os.read(fd,buffersize)

3) 写入文件:os.write(fd,string)

4) 文件指针操作:os.lseek(fd,pos,how)

5) 关闭文件:os.close(fd)

 

调用之前要首先import 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)

删除多级目录

rmdir(dir)

删除目录(目录必须空目录)

 

OS.path模块方法

os.path方法

说明

exits(path)

当前路径是否存在

isdir(s)

是否是一个目录

isfile(path)

是否是一个文件

getsize(filename)

返回文件大小

dirname(p)

返回路径的目录

basename(p)

返回路径的文件名

 

4.文件练习

内容:使用python管理ini文件:实现查询,添加,删除,保存

目的:1.掌握文件基本操作 2.认识ini文件 3.了解ConfigParser模块

ini配置文件格式:方便快速的查看某个选项里的某个条目的值

节:[session]

参数(键=值) :name=value

例子:    [port]

       port1=8000

       port2=8001

使用的时候要先导入ConfigParser





read方法是读入一个文件,即加载

sections:返回所有的section的name

item就可以将所有的内容dump出来

set:可以对item修改,也可以插入一个条目

remove_option:删除一个条目

remove_section:删除一个section



练习:写一个脚本来管理ini文件

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: