• Python开发 文件操作


    1、读写文件

    open()将会返回一个file对象,基本语法:

    open(filename,mode)

    filename:是一个包含了访问的文件名称的路径字符串

    mode:决定了打开文件的模式:只读,写入,追加等,默认文件访问模式为只读(r)

    不同模式打开文件的列表:

    r:以只读的方式打开文件,文件的指针将会放在文件的开头,为默认模式

    rb:以二进制格式打开一个文件用于只读,文件指针会在文件的开头

    r+:打开一个文件用于读写,文件指针将会在文件的开头

    rb+:以二进制格式打开一个文件用于读写,文件指针会放在文件的开头

    w:打开一个文件用于写入,如果该文件已存在则将会覆盖文件,如果不存在则创建新文件

    wb:以二进制打开一个文件用于写入

    w+:打开一个文件用于读写

    wb+:以二进制格式打开一个文件用于读写,如果文件存在则覆盖,如果不存在则创建新文件

    a:打开一个文件用于追加内容,如果文件已存在,文件指针会放在文件的结尾,如果不存在则创建新文件进行写入

    ab:以二进制格式打开一个文件用于追加写入

    a+:打开一个文件用于读写,如果该文件已存在,文件指针会放在结尾,文件打开时会是追加模式,该文件不存在则创建新文件

    ab+:以二进制格式打开一个文件用于追加。

    复制代码
    >>> file = open('test1.py','w')  #以写模式打开文件
    >>> file.write('hello python')
    12
    >>> file.flush()  #刷新文件内容
    >>> file.read()   #文件不可读
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    io.UnsupportedOperation: not readable
    
    >>> file = open('test1.py','r')  #以只读打开文件
    >>> file.readline()  #读取一行文件内容
    'hello python
    '
    >>> file.readline()
    'hello python
    '
    >>> file.readline()
    ''
    >>> file.close()   #关闭文件
    复制代码

    2、文件对象的方法

    f.read():读取一个文件的内容

    复制代码
    >>> f = open('/etc/passwd','r')
    >>> f.read(5) #指定字节数读取
    'root:'
    >>> f.read() #读取文件全部内容
    "root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
    abrt:x:173:173::/etc/abrt:/sbin/nologin
    haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
    ntp:x:38:38::/etc/ntp:/sbin/nologin
    saslauth:x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    tcpdump:x:72:72::/:/sbin/nologin
    vmail:x:5000:5000::/home/vmail:/sbin/nologin
    apache:x:48:48:Apache:/var/www:/sbin/nologin
    mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
    ilanni:x:5001:5001::/home/ilanni:/bin/bash
    dovecot:x:97:97:Dovecot IMAP server:/usr/libexec/dovecot:/sbin/nologin
    dovenull:x:498:499:Dovecot's unauthorized user:/usr/libexec/dovecot:/sbin/nologin
    "
    >>> f.close()
    复制代码

    f.readline():会从文件中读取单独的一行,换行符为“ ”,如果返回一个空字符串说明已经读到最后一行

    复制代码
    >>> f = open('/etc/passwd','r')
    >>> f.readline()   #读取一行的内容
    'root:x:0:0:root:/root:/bin/bash
    '
    >>> f.readline()
    'bin:x:1:1:bin:/bin:/sbin/nologin
    '
    >>> f.readline()
    'daemon:x:2:2:daemon:/sbin:/sbin/nologin
    '
    >>> f.close()
    复制代码

    f.readlines():将会以列表的形式返回该文件中包含的所有行

    复制代码
    >>> f = open('/etc/passwd','r')
    >>> f.readlines()   #读取所有行
    ['root:x:0:0:root:/root:/bin/bash
    ', 'bin:x:1:1:bin:/bin:/sbin/nologin
    ', 'daemon:x:2:2:daemon:/sbin:/sbin/nologin
    ', 'adm:x:3:4:adm:/var/adm:/sbin/nologin
    ', 'lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    ', 'sync:x:5:0:sync:/sbin:/bin/sync
    ', 'shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    ', 'halt:x:7:0:halt:/sbin:/sbin/halt
    ', 'mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    ', 'uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
    ', 'operator:x:11:0:operator:/root:/sbin/nologin
    ', 'games:x:12:100:games:/usr/games:/sbin/nologin
    ', 'gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
    ', 'ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    ', 'nobody:x:99:99:Nobody:/:/sbin/nologin
    ', 'dbus:x:81:81:System message bus:/:/sbin/nologin
    ', 'vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
    ', 'abrt:x:173:173::/etc/abrt:/sbin/nologin
    ', 'haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
    ', 'ntp:x:38:38::/etc/ntp:/sbin/nologin
    ', 'saslauth:x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin
    ', 'postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    ', 'sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    ', 'tcpdump:x:72:72::/:/sbin/nologin
    ', 'vmail:x:5000:5000::/home/vmail:/sbin/nologin
    ', 'apache:x:48:48:Apache:/var/www:/sbin/nologin
    ', 'mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
    ', 'ilanni:x:5001:5001::/home/ilanni:/bin/bash
    ', 'dovecot:x:97:97:Dovecot IMAP server:/usr/libexec/dovecot:/sbin/nologin
    ', "dovenull:x:498:499:Dovecot's unauthorized user:/usr/libexec/dovecot:/sbin/nologin
    "]
    >>> f.seek(0)   #跳指针到开头
    0
    >>> f.readlines(9)  #指定参数读取行
    ['root:x:0:0:root:/root:/bin/bash
    ']
    >>> f.readlines(9)
    ['bin:x:1:1:bin:/bin:/sbin/nologin
    ']
    >>> f.readlines(9)
    ['daemon:x:2:2:daemon:/sbin:/sbin/nologin
    ']
    >>> f.readlines(10)
    ['adm:x:3:4:adm:/var/adm:/sbin/nologin
    ']
    >>> f.readlines(1)
    ['lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    ']
    >>> f.readlines()
    ['sync:x:5:0:sync:/sbin:/bin/sync
    ', 'shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    ', 'halt:x:7:0:halt:/sbin:/sbin/halt
    ', 'mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    ', 'uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
    ', 'operator:x:11:0:operator:/root:/sbin/nologin
    ', 'games:x:12:100:games:/usr/games:/sbin/nologin
    ', 'gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
    ', 'ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    ', 'nobody:x:99:99:Nobody:/:/sbin/nologin
    ', 'dbus:x:81:81:System message bus:/:/sbin/nologin
    ', 'vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
    ', 'abrt:x:173:173::/etc/abrt:/sbin/nologin
    ', 'haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
    ', 'ntp:x:38:38::/etc/ntp:/sbin/nologin
    ', 'saslauth:x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin
    ', 'postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    ', 'sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    ', 'tcpdump:x:72:72::/:/sbin/nologin
    ', 'vmail:x:5000:5000::/home/vmail:/sbin/nologin
    ', 'apache:x:48:48:Apache:/var/www:/sbin/nologin
    ', 'mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
    ', 'ilanni:x:5001:5001::/home/ilanni:/bin/bash
    ', 'dovecot:x:97:97:Dovecot IMAP server:/usr/libexec/dovecot:/sbin/nologin
    ', "dovenull:x:498:499:Dovecot's unauthorized user:/usr/libexec/dovecot:/sbin/nologin
    "]
    >>> 
    复制代码

    f.write():将内容写入到文件中,然后返回写入的字符数

    复制代码
    >>> f = open('test2.py','w')
    >>> f.write('hello python')   #写入内容
    12
    >>> libex = 'hhhhhhhhhhhhhh'
    >>> f.write(libex)   #按变量写入内容
    14
    >>> f.close()  #关闭文件
    >>> 
    [root@python day7]# cat test2.py   #内容没有换行符
    hello pythonhhhhhhhhhhhhhh[root@python day7]#
    复制代码

    f.tell():返回文件对象当前所处的位置,它是从文件开头开始算起的字节数。

    复制代码
    >>> f = open('test2.py','r')
    >>> f.tell()   #指针当前位置
    0
    >>> f.readline()   #读取一行文件后
    'hello pythonhhhhhhhhhhhhhh'
    >>> f.tell()   #指针移动26字节数处
    26
    >>> f.close()  #关闭文件
    复制代码

    f.seek():改变当前文件指针的位置,f.seek(offset,from_what)

        from_what的值,如果是0表示开头,如果是1表示当前位置,2表示文件的结尾:

    seek(x,0):从文件首行首字符开始移动x个字符

    seek(x,1):从当前为往后移动x个字符

    seek(-x,2):从文件的结尾往前移动x个字符

    from_what值默认为0,即文件开头。

    复制代码
    >>> f = open('test3.py','a+')
    >>> f.readlines()
    []
    >>> f.seek(0)  #开头
    0
    >>> f.readlines()
    ['aaa
    ', 'bbb
    ', 'ccc
    ', 'ddd
    ', 'eee
    ']
    >>> f.tell()
    20
    复制代码

    f.clise():关闭文件并释放系统的资源。

    >>> f = open('test3.py','r')
    >>> f.readlines()
    ['aaa
    ', 'bbb
    ', 'ccc
    ', 'ddd
    ', 'eee
    ']
    >>> f.close()  #关闭文件

     f.truncate() 清空文件

  • 相关阅读:
    Oracle kill sessin 说明
    Oracle Rules Manager 和 Oracle Expression Filter 组件 说明
    Oracle 使用RMAN COPY 移动 整个数据库 位置 示例
    Oracle Text 组件 说明
    Oracle Workspace Manager 组件 说明
    Oracle expdp 报错: ORA39125 ORA4063 on View SYS.KU$_CLUSTER_VIEW 解决方法
    Oracle expdp 报错: ORA39125 ORA4063 on View SYS.KU$_CLUSTER_VIEW 解决方法
    Oracle ORA31000: Resource 'http://xmlns.oracle.com/xdb/acl.xsd' is not an XDB schema 解决方法
    Oracle Workspace Manager 组件 说明
    Oracle XDB 组件 重建 说明
  • 原文地址:https://www.cnblogs.com/tangkaishou/p/10268160.html
Copyright © 2020-2023  润新知