zoukankan      html  css  js  c++  java
  • Python(六)之文件对象

    Python文件对象

    明确文件系统:

    • 获取文件对象:

    var_name = open(file_name[mode,[bufsize]])

    缓冲:

           0:禁用

           1:使用缓冲,只缓冲一行数据

           2+:指定缓存空间大小

           负数:使用系统默认缓冲区

    •  文件对象的内置方法、函数、属相

    next

    In [10]: f1 = open('/etc/passwd','r')
    In [11]: type(f1)
    Out[11]: file
    In [12]: f1.next()
    Out[12]: 'root:x:0:0:root:/root:/bin/bash
    '
    In [13]: f1.next()
    Out[13]: 'bin:x:1:1:bin:/bin:/sbin/nologin
    '
    In [14]: f1.next()
    Out[14]: 'daemon:x:2:2:daemon:/sbin:/sbin/nologin
    '

    close

    In [35]: f1.close()
    

     fileno 返回文件描述符

    In [38]: f1 = open('/etc/passwd','r')
    In [39]: f1.fileno()
    Out[39]: 8
    

     

    readline,readlines

    返回字符串对象

    In [40]: f1.readline()
    Out[40]: 'root:x:0:0:root:/root:/bin/bash
    '
    返回文件所有行为列表对象:
    In [41]: f1.readlines()
    Out[41]: 
    ['bin:x:1:1:bin:/bin:/sbin/nologin
    ',
     'daemon:x:2:2:daemon:/sbin:/sbin/nologin
    ',
     'mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    ',
     'nobody:x:99:99:Nobody:/:/sbin/nologin
    ']
    

     tell:游标在文件中的位置,字节

    In [47]: f1.tell()
    Out[47]: 951
    

     

    file.seek(offset[whence])

           whence:起点

                      0:从文件头偏移,默认

    1:从当前位置偏移

    2:从文件尾部偏移

    In [48]: f1.tell()
    Out[48]: 951
    In [49]: f1.seek(0)
    In [50]: f1.tell()
    Out[50]: 0
    file.read([size])
    

     

    file.read([size])  读取多少个字节

    In [51]: f1.read(10)
    Out[51]: 'root:x:0:0'
    此时在readline,或next读取的是位置到行尾
    In [52]: f1.readline()
    Out[52]: ':root:/root:/bin/bash
    '
    

    file.write打开文件保存数据

    In [61]: cp /etc/passwd .
    In [62]: ls
    passwd
    In [64]: f1 = open('passwd','r+')
    In [65]: f1.next()
    Out[65]: 'root:x:0:0:root:/root:/bin/bash
    '
    I [66]: f1.seek(0,2)
    In [67]: f1.tell()
    Out[67]: 951
    In [68]: f1.write('new line.
    ')
    In [69]: f1.tell()
    Out[69]: 961
    In [70]: cat passwd
    root:x:0:0:root:/root:/bin/bash
    mysql:x:306:306::/home/mysql:/bin/bash
    new line.
    In [71]: f1.close()
    In [72]: f2 = open('new_file','w+')
    In [73]: f2.write('Python')
    In [74]: f2.close()
    In [75]: cat new_file
    Python
    读模式打开不存在文件,报IOError
    In [76]: f3 = open('new_file2','r+')
    ---------------------------------------------------------------------------
    IOError                                   Traceback (most recent call last)
    <ipython-input-76-1d0d8a99b4f2> in <module>()
    ----> 1 f3 = open('new_file2','r+')
    IOError: [Errno 2] No such file or directory: 'new_file2'
    In [77]: f3 = open('new_file2','a')
    In [78]: ls
    new_file  new_file2  passwd
    

     writelines(...) 

    writelines(sequence_of_strings) -> None.  Write the strings to the file.

          Note that newlines are not added.  The sequence can be any iterable object

    producing strings. This is equivalent to calling write() for each string

    In [13]: f4 = open('new_file4','w+')
    
    In [14]: import os
    
    In [15]: l4 = os.listdir(‘/etc’)
    

    返回列表对象:

    In [19]: f4.writelines(l4)

    In [20]: f4.flush()

    可以看到,writelines把列表中多有对象当成一个字符串写入文件,没有换行

    下面进行手动换行:

    重新生成列表,添加换行符:

    In [23]: l4 = [i+' ' for i in os.listdir('/etc')]

    In [25]: f4 = open('new_file4','w+')
    
    In [26]: f4.writelines(l4)
    
    In [27]: f4.flush()
    
    In [28]: f4.close()
    

    isatty()判断是不是终端

    In [52]: f3 = open('new_file3','r+')
    
    In [53]: f3.isatty()
    
    Out[53]: False
    

    truncate(N)截取保留N个字节:

    In [55]: f3.readline()
    Out[55]: 'root:x:0:0:root:/root:/bin/bash
    '
    In [56]: f3.readline()
    Out[56]: 'bin:x:1:1:bin:/bin:/sbin/nologin
    '
    In [57]: f3.readline()
    Out[57]: 'daemon:x:2:2:daemon:/sbin:/sbin/nologin
    '
    截取保留当前游标位置及之前字节数
    In [58]: f3.truncate(f3.tell())
    In [59]: f3.flush()
    In [60]: f3.seek(0)
    In [61]: f3.readlines()
    Out[61]: 
    ['root:x:0:0:root:/root:/bin/bash
    ',
     'bin:x:1:1:bin:/bin:/sbin/nologin
    ',
     'daemon:x:2:2:daemon:/sbin:/sbin/nologin
    ']
    

    closed 属性,判断文件打开状态

    In [62]: f4.closed
    
    Out[62]: False
    

    file.name属性

    In [53]: f1.name
    
    Out[53]: '/etc/passwd'
    

    mode文件打开模式,另外还有encoding、softspace等。

               file.close      file.flush      file.next       file.seek       file.writelines 
               file.closed     file.isatty     file.read       file.softspace  file.xreadlines 
               file.encoding   file.mode       file.readinto   file.tell                       
               file.errors     file.name       file.readline   file.truncate                   
               file.fileno     file.newlines   file.readlines  file.write                      
    
    • 练习

    1、1-10的平方写进文件new_file3,一次写一个对象

    2、上面writelines方法,写入/etc下所有文件名到文件。

    In [7]: f3 = open('new_file3','w+')
    In [8]: for line in (i**2 for i in range(1,11)):
       ...:     f3.write(str(line)+'
    ')
       ...:     
    In [9]: f3.flush()
    In [10]: f3.close()
    In [11]: cat new_file3
    1
    4
    9
    16
    25
    36
    49
    64
    81
    100
    
  • 相关阅读:
    poj3686 Windys
    poj3155 Hard Life
    luoguP2774 方格取数问题
    poj3469 Dual Core CPU
    poj3281 Dining
    luogu P3410 拍照
    离散化
    最短路(SPFA)
    lower_bound && upper_bound
    gcd
  • 原文地址:https://www.cnblogs.com/jjzd/p/6642818.html
Copyright © 2011-2022 走看看