zoukankan      html  css  js  c++  java
  • 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 "<stdin>", line 1, in <module>
    IOError: [Errno 2] No such file or directory: 'hello1.py'

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

    >>> f=open('hello.py')
    >>> f.read()
    "#!/usr/bin/env python print 'hello world' "
    >>> f.write('test')
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    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 "<stdin>", line 1, in <module>
    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 "<stdin>", line 1, in <module>
    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'

  • 相关阅读:
    outline basic
    Best lua IDE
    Powershell core
    [转]ceph pg peering过程分析
    [转]ceph rbd到OSD的数据映射
    [转]ceph三种存储接口--块设备-文件系统-对象存储
    ceph monitor----paxos算法1
    ceph monitor----初始化和选举
    ceph monitor---总结1
    [转]ceph RADOS----概述
  • 原文地址:https://www.cnblogs.com/yufeihlf/p/6076909.html
Copyright © 2011-2022 走看看