关于python对文件的处理、以下选项_python文件处理

在python中,文件其实就是对象。通过open()函数,打开文件,文件的属性包括读文件,写文件,关闭文件等.

1.python文件打开方式

1.1文件打开方法

open(name[,access_mode='r'[,buffering=-1]])

name:文件路径

access_mode:打开方式,可选选项,默认以只读的方式打开。下方会详细介绍几种模式的区别。

buffering:用于指示访问文件所采用的缓冲方式,可选选项,默认是使用系统默认缓冲机制。其中0表示不缓冲。1表示只缓冲一行数据,任何大于1的值代表使用给定值作为缓冲区大小。不提供该参数或者给定负值代表使用系统默认缓冲机制。

1.2关于access_mode几种方式

'r':只读方式打开。文件必须存在;不支持写,当文件写入数据时会报错。

'w':只写方式打开。文件不存在创建文件;文件存在则清空文件内容,采用write可重新写入数据。不支持读,当读文件数据时会报错。

'a':追加方式打开。文件不存在创建文件;文件存在则保留文件内容,采用write可在文件末行追加写入数据。不支持读,当读文件数据时会报错。

'r+':读写方式打开。文件必须存在;保留文件内容,支持写,采用write可在文件首行处写入数据,并覆盖相对应位置的原数据。

'w+':读写方式打开。文件不存在创建文件;文件存在则清空文件内容,采用write可重新写入数据。支持读。

'a+':以追加方式及读写方式打开。文件不存在创建文件;文件存在则保留文件内容,采用write可在文件末行追加写入数据。支持读。

'rb','wb','ab','rb+','wb+','ab+':以二进制方式打开文件,其他的和上面一样。

说明:

1.支持读,表示可以使用文件属性read,readline,readlines

2.支持写,表示可以使用文件属性write,writelines

3.'w'方式的写,是清空文件所有内容,重新写入数据。

4.'a'方式的写,不清空文件内容,在文件末尾追加的写入数据。

5.'r+'方式的写,不清空文件内容,在文件首行处写入数据,并覆盖相对应位置的原数据。

举例:

比如说原文件内容为:

abc

efg

当写入数据write('xz')

如果以'w'方式打开文件并写入数据,则文件内容变为:

xz

如果以'a'方式打开文件并写入数据,则文件内容变为:

abc

efg

xz

如果以'r+'方式打开文件并写入数据,则文件内容变为:

xzc

efg

关于'r':

>>> import os

>>> os.getcwd() #查看python解释器当前路径

'/home/autotest'

>>> os.listdir('/home/autotest') #查看python解释器当前路径下有哪些文件,目前只存在hello.py文件

['hello.py']

#文件必须存在,不存在会报错。

>>> f=open('hello1.py','r+')

Traceback (most recent call last):

File "", line 1, in

IOError: [Errno 2] No such file or directory: 'hello1.py'

#文件支持只读read();不支持写write(),写时报错。

>>> f=open('hello.py')

>>> f.read()

"#!/usr/bin/env python\nprint 'hello world'\n"

>>> f.write('test')

Traceback (most recent call last):

File "", line 1, in

IOError: File not open for writing

关于'w':

>>> import os

>>> os.getcwd() #查看python解释器当前路径

'/home/autotest'

>>> os.listdir('/home/autotest') #查看python解释器当前路径下有哪些文件,目前只存在hello.py文件

['hello.py']

#当文件不存在,可创建文件。

>>> fw=open('hello1.py','w')

>>> os.listdir('/home/autotest')

['hello.py', 'hello1.py']

#文件支持只写write();不支持读read(),读时报错。

>>> fw.write('print w')

>>> fw.read()

Traceback (most recent call last):

File "", line 1, in

IOError: File not open for reading

其他几种方式就暂不举例了,大家可以自行地在python解释器上试试看,多动手就会明白了。

2.文件的属性

2.1查看文件属性

>>> f=open("hello.py") #默认以只读的方式打开

>>> dir(f) #查看文件属性

['__class__', '__delattr__', '__doc__', '__enter__', '__exit__', '__format__', '__getattribute__', '__hash__', '__init__', '__iter__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'close', 'closed', 'encoding', 'errors', 'fileno', 'flush', 'isatty', 'mode', 'name', 'newlines', 'next', 'read', 'readinto', 'readline', 'readlines', 'seek', 'softspace', 'tell', 'truncate', 'write', 'writelines', 'xreadlines']

2.2文件读取属性

read([size]):读取文件,读取size个字节。默认读取全部。

readline([size]):读取一行,读取一行中的size个字节。默认读取一行。

例,如果一行中有10个字节,如果size小于10,则readline(2)则读取前两字节,再readline(2)则读取剩余字节的前两个字节,再readline()则读取剩余的六个字节。如果size大于等于10,则读取一整行。

readlines([size]):读取完文件(最多是缓冲区DEFAULT_BUFFER_SIZE的字节数),返回每一行所组成的列表(由字符串组成的列表)。

这个size指的是缓冲器的大小,如果给的值为1或者其他数值,文件最多返回8192个字节。

>>> import io

>>> print io.DEFAULT_BUFFER_SIZE

8192

2.3文件写属性

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

writelines(sequence_of_strings):写多行到文件:sequence_of_strings由字符串组成的序列(元组或列表)。

说明:

1.写文件过程,在python解释器写入数据时,先写到缓冲区,如果不使用close()或者flush(),是不会写入磁盘,文件修改是不生效的。主动调用close()或者flush(),写缓存同步到磁盘。如果写入数据了大于或者等于写缓存,写缓存同步到磁盘。

>>> f=open('hello1.py','w+')

>>> f.write('hello1')

>>> f.flush()

>>> f.tell()

6

>>> f.seek(0,os.SEEK_SET)

>>> f.tell()

0

>>> f.read()

'hello1'

>>> f.close()

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

3.读取文件后,无法重新再次读取已经读取过的内容。原因是,文件指针已指向末尾,如果想重新读取内容,需要将文件指针指向开头。

>>> f=open('hello1.py','a+')

>>> f.tell()

0

>>> f.read() #第一次读取可读取文本内容。

'hello1'

>>> f.tell()

6

>>> f.read() #再次读取则无法重新获取内容。原因是,文件指针已指向末尾。

''

>>> f.seek(0,os.SEEK_SET) #文件指针指向开头,则可以重新读取内容。

>>> f.tell()

0

>>> f.read()

'hello1'

>>> f.close()

2.4关闭文件属性

close():要养成良好习惯,使用open打开文件后,读取文件之后,当不再使用该文件,记得一定要关闭文件哦。因为close()后,数据才会真正的将写缓存同步到磁盘,才会修改文件成功。并且,如果打开文件数到了系统限制,再打开文件就会失败。

2.5其他属性

flush():直接把内部缓冲区中的数据立刻写入文件。

tell():返回当前文件指针位置

seek(偏移量[,相对位置]):移动文件指针位置,偏移量可正可负。相对位置可以导入os模块:os.SEEK_SET:相对文件起始位置;os.SEEK_CUR:相对文件当前位置;os.SEEK_END相对文件结尾位置。

fileno():文件描述符

mode:文件打开权限

encoding:文件编码格式

closed:文件是否关闭。值为False,表示文件未关闭。

3.使用os模块处理文件

3.1使用OS模块打开文件

os.open(filename,flag[,mode]):打开文件,返回文件描述符

flag:打开文件方式

os.O_CREAT:创建文件

os.O_RDONLY:只读方式打开

os.O_WRONLY:只写方式打开

os.O_RDWR:读写方式打开

3.2使用os模块对文件进行操作

os.read(fd,buffersize):读取文件,fd为文件描述符

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

os.lseek(fd,pos,how):文件指针操作,pos是偏移量,how是相对位置:os.SEEK_SET:相对文件起始位置;os.SEEK_CUR:相对文件当前位置;os.SEEK_END相对文件结尾位置。

os.close(fd):关闭文件

3.3os模块方法介绍

os.access(path,mode):判断该文件权限:mode:os.F_OK:文件是否存在,os.R_OK:是否有读权限,os.W_OK是否有写权限,os.X_OK是否有可执行权限。

os.listdir(path):返回当前目录下所有文件

os.remove(path):删除文件

os.rename(old,new):修改文件或者目录名

os.mkdir(path [,mode]):创建目录

os.makedirs(path [,mode]):创建多级目录

os.removedirs(path):删除多级目录

os.rmdir(path):删除目录(目录必须为空)

3.4os.path模块方法介绍

os.path.exists(path):当前路径是否存在

os.path.isdir(s):是否是一个目录

os.path.isfile(path):是否是一个文件

os.path.getsize(filename):返回文件大小

os.path.dirname(p):返回路径的目录

os.path.basename(p):返回路径的文件名

os.path.getmtime(path):文件或文件夹的最后修改时间

os.path.join(path1,path2,...):将path进行组合,若其中有绝对路径,则之前的path将被删除

举例说明:

>>> import os

>>> os.getcwd()

'/home/autotest'

>>> os.listdir('/home/autotest')

['hello.py', 'hello1.py', 'hello3.py', 'hello2.py', 'email126pro']

>>> os.path.exists('/home/autotest/hello.py')

True

>>> os.path.exists('hello.py')

True

>>> os.path.exists('/home/autotest/')

True

>>> os.path.isfile('/home/autotest/hello.py')

True

>>> os.path.isfile('hello.py')

True

>>> os.path.isdir('/home/autotest/')

True

>>> os.path.getsize('/home/autotest/hello.py')

42

>>> os.path.getsize('hello.py')

42

>>> os.path.getsize('hello11.py')

Traceback (most recent call last):

File "", line 1, in

File "/usr/lib64/python2.6/genericpath.py", line 49, in getsize

return os.stat(filename).st_size

OSError: [Errno 2] No such file or directory: 'hello11.py'

>>> os.path.dirname('hello.py')

''

>>> os.path.dirname('/home/autotest/hello.py')

'/home/autotest'

>>> os.path.dirname('/home/autotest/')

'/home/autotest'

>>> os.path.dirname('/home/autotest')

'/home'

>>> os.path.basename('hello.py')

'hello.py'

>>> os.path.basename('/home/autotest/hello.py')

'hello.py'

>>> os.path.basename('/home/autotest/')

''

>>> os.path.getmtime('/home/autotest/hello.py')

1479450484.9321721

>>> os.path.join('/home/autotest','hello.py')

'/home/autotest/hello.py'

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值