• python基础之文件操作


    对于文件操作中最简单的操作就是使用print函数将文件输出到屏幕中,但是这种操作并不能是文件保存到磁盘中去,如果下调用该数据还的重新输入等。

    而在python中提供了必要的函数和方法进行默认情况下的文件基本操作。你可以用 file 对象做大部分的文件操作。也可保存数据。其中最常见的文件操作就是文件读写操作。

    文件读写

    读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。

     读文件

    要以读文件的模式打开一个文件对象,使用Python内置的open()函数,传入文件名和标示符

    f = open('E:LINUXxx.txt','r')
    

    标示符'r'表示读,这样,我们就成功地打开了一个文件。

    如果文件不存在,就会报错

    文件打开成功,接下来,调用read()方法可以一次读取文件的全部内容,Python把内容读到内存,用一个str对象表示:

     f.read()
    'Hello, world!'
    

    在完成后,然后调用close()方法关闭文件,在python中,系统会默认帮你关闭,但这种方法不安全,也没有时间的确定性,所以我们在完成读写文件操作后,一定要记得去关闭它

     f.close()
    

    写文件

    写文件和读文件是一样的,唯一区别是调用open()函数时,传入标识符'w'或者'wb'表示写文本文件或写二进制文件:

    f = open('文件存放的路径', 'w')
    f.write('Hello, world!')
    f.close()
    

    我们在执行文件的读写操作时,我们会发现,不管是写文件还是读文件,最后都会去调用close()方法去关闭文件。这出于对文件的安全性考虑,不过也不排除粗心的人在执行完文件读写后,忘记调用close()方法。出于这种考虑。python中还有一种不用调用close()的文件读写操作方法。就是with方法。

    with open('文件路径', 'w') as f:
        f.write('Hello, world!')
    

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

    r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
    
    rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
    
    r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
    
    rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
    
    w 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
    
    wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
    
    w+ 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
    
    wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
    
    a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
    
    ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
    
    a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
    
    ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
    

    文件定位

    tell()方法告诉你文件内的当前位置;换句话说,下一次的读写会发生在文件开头这么多字节之后。

    seek(offset [,from])方法改变当前文件的位置。Offset变量表示要移动的字节数。From变量指定开始移动字节的参考位置。

    如果from被设为0,这意味着将文件的开头作为移动字节的参考位置。如果设为1,则使用当前的位置作为参考位置。如果它被设为2,那么该文件的末尾将作为参考位置。

    注:foo.txt文件是我们事先创建好的文件
    
    fo = open("foo.txt", "r+")
    str = fo.read(10);
    print ("读取的字符串是 : ", str)
     
    # 查找当前位置
    position = fo.tell();
    print( "当前文件位置 : ", position)
     
    # 把指针再次重新定位到文件开头
    position = fo.seek(0, 0);
    str = fo.read(10);
    print ("重新读取字符串 : ", str)
    # 关闭打开的文件
    fo.close()
    

    列出file对象常用的函数

    file.flush() #刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。
    #最常用的就是进度条实例
    import sys,time
    for i in range(30):
    sys.stdout.write("*")
    sys.stdout.flush()
    time.sleep(0.1)
    
    file.truncate([size]) #截取文件,截取的字节通过size指定,默认为当前文件位置
    f.truncate(5)
    f.write('hello world')
    f.truncate(5)
    f.close()
    注:该方法不能在 "r" 模式下进行。
    在w模式下:先清空,再写,再截断
    在a模式下:直接将指定位置后的内容截断
    
    
    file.read([size]) #从文件读取指定的字节数,如果未给定或为负则读取所有。
    file.readline([size])#读取整行,包括 "
    " 字符。
    file.readlines([sizehint])#读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比sizhint较大, 因为需要填充缓冲区。
    

      

     

      

     

      

  • 相关阅读:
    BZOJ-1034-[ZJOI2008]泡泡堂BNB(贪心)
    BZOJ-2456-mode(思维题)
    POJ-2528-Mayor's posters(线段树+离散化)
    POJ-2352-Stars(树状数组)
    HDU-2688-Rotate(树状数组)
    POJ-1195-Mobile phones(二维树状数组)
    YYHS-NOIP2017Training0921-逆光
    YYHS-鏖战字符串(斜率优化)
    左偏树
    2-sat模板
  • 原文地址:https://www.cnblogs.com/flash55/p/5813546.html
Copyright © 2020-2023  润新知