• python基础教程总结10——文件


    1.打开文件

      open(name[mode[,buffing])    参数:  文件,模式,缓冲

    1)name: 是强制选项,模式和缓冲是可选的

    #如果文件不在,会报下面错误
    1
    >>> f = open(r'D: ext.txt','r') 2 Traceback (most recent call last): 3 File "<stdin>", line 1, in <module> 4 IOError: [Errno 2] No such file or directory: 'D:\text.txt'

    2)文件模式

    'r'       读模式
    'w'      写模式
    ’a'      追加模式
    'b'      二进制模式(可添加到其他模式中使用)
    ’+'      读/写模式(可添加到其他模块中使用)

    NOTE:

        默认的方式,比如说open('filename')是读模式

        r+, 则表示可读写

         如果是二进制文件或图形文件,则必须用缓冲模式

         普通的w模式会覆盖文件的内容,a模式则不会.

         rb则可以用来读取二进制文件.

         通过参数模式中使用U参数,能够在打开文件时使用通用的换行符支持模式,无论 , ,都会换成 ,而不用考虑运行的平台.

    3)缓冲

      0或者False: 无缓冲,所有操作直接针对硬盘

      1或者True:  有缓冲,内存代替硬盘,速度快,只有close,flush才写入硬盘同步.

      > 1  :  表示缓冲区的大小

      -1    :  表示默认的缓冲区大小

    2.文件方法

    2.1 读写

      #对空文件来说: 提供写时,会在已在字符串末尾追加,

    1 >>> f = open('somefile.txt','w')  
    2 >>> f.write('Hello,')  
    3 >>> f.write('World!')  
    4 >>> f.close()  
    5 #somefile.txt文件内容  
    6 Hello,World!  

      #对于非空文件:提供w方法时,会覆盖文件中的内容

    1 >>> f = open('somefile','w')  
    2 >>> f.write('This is 1st line.
    ')  
    3 >>> f.write('This is 2nd line.')  
    4 >>> f.close()  
    5 #somefile.txt文件内容  
    6 This is 1st line.  
    7 This is 2nd line.  

      简单读取的例子:

    1 >>> f = open('somefile.txt','r')  
    2 >>> f.read(16)#先读取16个字符  
    3 'This is 1st line'  
    4 >>> f.read()  #会读取剩下的内容,除非seek定位到0,重新读取  
    5 '.
    This is 2nd line.'  
    6 >>> f.close()  

    2.2 管道输出

      $ cat somefile.txt | python somescript.py | sort 

     #一个简单例子: 统计一个文本中单词的数量

    $ cat somefile.txt  
    This is a book!
    That is a dog!
    Who are you?

      脚本清单:

    #somescript.py  
    import sys  
    text  = sys.stdin.read()    #读取所以输入
    words = text.split()        #分割字符串   
    print "Word Count:", len(words)  

       输出结果:

    # cat somefile.txt | python somescript.py  
    Word Count: 11  
    

      

    2.3 读写行

    readline :  读取行,包括换行符
    
    readlines:  读取所有行
    
    write:      写一行, 注意:没有writeline方法
    
    writelines: 写多行  

      NOTE: 如何判断不同的行以什么结尾? os.linesep

    #UNIX   
    >>> import os  
    >>> os.linesep  
    '
    '  
    #WINDOWS  
    >>> import os  
    >>> os.linesep  
    '
    '  
    

      

    2.4 基本文件方法

    #测试文本somefile.txt

    Welcome to this file
    
    There is nothing here except
    
    This stupid haiku 

    #首先读取指定字符 ——  f.read(n)

    >>> f = open(r'd:LearnPythonsomefile.txt')  
    >>> f.read(7)  
    'Welcome'  
    >>> f.read(4)  
    ' to '  
    >>> f.close()  
    

    #其次读取所有的行—— f.read()

    >>> f = open(r'd:LearnPythonsomefile.txt','r')  
    >>> print f.read()  
    Welcome to this file  
    There is nothing here except  
    This stupid haiku    

    #接着是读取行 —— f.readline()

    >>> f.close()  
    >>> f = open(r'd:LearnPythonsomefile.txt')  
    >>> for i in range(3):  
    ...     print str(i) + ':' + f.readline()  
    ...  
    0:Welcome to this file  
    1:There is nothing here except  
    2:This stupid haiku    

    #再读取所有行 ——  f.readlines()

    >>> import pprint  
    >>> pprint.pprint(open('somefile.txt').readlines())  
    ['Welcome to this file
    ',  
     'There is nothing here except
    ',  
     'This stupid haiku']  

    #下面是写文件—— f.write(' ......')

    >>> f = open(r'somefile.txt','w')  
    >>> f.write('this
    is no
    haiku')  
    >>> f.close()  
    运行文件后,内容如下:  
    this  
    is no  
    haiku  
    

    #最后是writelines—— f.writelines( ' ....' )

    >>> f = open(r'somefile.txt')  
    >>> lines = f.readlines()  
    >>> f.close()  
    >>> lines[1] = "isn't a
    "  
    >>> f = open('somefile.txt','w')  
    >>> f.writelines(lines)  
    >>> f.close()  
    运行后,文件内容如下:  
    this   
    isn't a  
    haiku   

    2.5 关闭文件

      时刻记得close()来关闭文件,这样做的目的:

         安全考虑,防止文件因为某些原因崩溃,写不进数据

         出于数据同步考虑,close(),才会往硬盘中写数据

         出于效率的考虑,内存中的数据可清空一部分出来

      为了确保程序结束时close(),可以用try/finally结合使用

    # Open your file here  
    try:  
        # Write data to your file  
    finally:  
        file.close()  
    

      NOTE: 一般文件在close()之后才会写入硬盘,如果想不执行close()方法,又可以看到写入的内容,那么flush就派上用场了.

    3.对文件内容迭代

    3.1 按字节处理

    def process(string):  
            print 'Processing...', string  
    f = open('somefile.txt')  
    while True:  
            char = f.read(1)  
            if not char:  
                    break  
            process(char)  
    f.close()  

    3.2 按行处理

    f = open(filename)  
    while True:  
        line = f.readline()  
        if not line:  
            break  
        process(line)  
    f.close()  

    3.3 读取所有内容

      如果文件不是很大,可以用read(),或者readlines()读取的内容作为字符串来处理.

      #用read来迭代每个字符

    f = open(r'D:WorkPythonsomefile.txt')  
    for char in f.read():  
        process(char)   
    f.close()
    

      #用readlines来迭代行

    f = open(r'D:WorkPythonsomefile.txt','r')   
    for line in f.readlines():  
        process(line)  
    f.close()  

    3.4 使用fileinput懒惰型迭代

      在需要对一个大文件进行迭代时,readlines会占用太多的内存。这个时候可以使用while循环和readline方法来替代。

    import fileinput    
    def process(string):  
        print 'Processing...', string  
    for line in fileinput.input('somefile.txt'):  
        process(line) 
    

      

    3.5 文件迭代器

      #Python中文件是可以迭代的

    f = open('somefile.txt')  
    for line in f:  
        print line,  
    f.close()  
    

      #如果希望Python来完成关闭的动作,对文件进行迭代,而不使用变量存储变量,代码可以更加精简

    for line in open('somefile.txt'):  
        print line,  
    

      #sys.stdin也是可以迭代的

    import sys  
    for line in sys.stdin:  
        print line,  
    运行结果:  
    D:WorkPython>python file.py  
    #输入下面两行  
    Hello,World!  
    Hello,Jerry!  
    ^Z        
    #按下CTRL+Z键后,输入的内容,显示  
    Hello,World!  
    Hello,Jerry!  
    

      #可以对文件迭代器执行和普通迭代器相同的操作。比如将它们转换为字符串列表,这样所达到的效果和使用readlines一样.

    >>> f = open('somefile.txt','w')  
    >>> f.write('First line
    ')  
    >>> f.write('Second line
    ')  
    >>> f.write('Third line
    ')  
    >>> f.close()  
    >>> lines = list(open('somefile.txt'))  
    >>> lines  
    ['First line
    ', 'Second line
    ', 'Third line
    ']  
    >>> first,second,third = open('somefile.txt')  
    >>> first  
    'First line
    '  
    >>> second  
    'Second line
    '  
    >>> third  
    'Third line
    '  
    

      

  • 相关阅读:
    基于realsense的尺寸测量
    大服务器bimPowerEdgeR730 配置PaddlePaddle环境
    realsense d435i measure
    QMap 遍历
    大服务器配置CUDA cuDNN
    PaddleDetection配置记录
    Pset_CoveringCommon
    test
    笔记本SSD目标检测
    Qwidget显示图片
  • 原文地址:https://www.cnblogs.com/zxqstrong/p/4668303.html
Copyright © 2020-2023  润新知