文件读写

文件读写

1. 读文件

以读文件的模式,打开一个文件对象,使用open()函数

    f = open('D:\\gittrash\\bug.txt','r')
    以只读模式,读取该路径的文件,若文件不存在会报错ValueError

    f.read() 
    print(f.read()) 
    '''
    fuck wt!
    fuck you !

    fuck easy
    '''
    将文件内容一次性全部读出,以str 返回

    f.readline() 一行行地读
    print(f.readline())
    #fuck wt!

    f.readlines()   每一行读取,并每行作为一个元素,返回一个列表
    print(f.readlines()) 
    #['fuck wt!\n', 'fuck you !\n', '\n', 'fuck easy']


    f.close()
    文件对象使用完,必须关闭,不然会持续占用资源,操作系统能同时打开的文件对象是有限的

不可否认,文件操作很容易报出各种各样的错误,导致后面的代码无法运行,文件对象也无法关闭,这就需要用到异常处理

    try :
        f = open('D:\\gittrash\\bug.txt','r')
        f.read()
    finally:
        if f:
            f.close()
    finally的语句无论如何都会运行

try ...finally语句有些繁琐,可以简化成:

    with open('D:\\gittrash\\bug.txt','r') as f:
        print(f.read())

这样写不用关闭对象,with会自动处理,原因不晓得

读取时还有一个编码问题

有的文件时文本,有的是二进制,有的还有非法编码,open()函数需要设置相应的参数

    f = open('D:\\gittrash\\bug.txt','rb')
    print(f.read())
    #b'fuck wt!\r\nfuck you !\r\n\r\nfuck easy'
    这是以二进制格式读取,得到 b'...' 的数据

    f = open('D:\\gittrash\\bug.txt','r',encoding='gbk')
    这是要读取一个以gbk编码的文件,需要设置 encoding 参数

    甚至有些文件夹杂了非法编码的字符,我们需要特别处理
    f = open('/Users/michael/gbk.txt', 'r', encoding='gbk', errors='ignore')
    设置errors,直接忽略

2.写文件

和读文件基本一样,改一下参数即可

f1 = open('D:\\gittrash\\bug.txt','w') 以文本形式写入
f2 = open('D:\\gittrash\\bug.txt','wr') 以二进制格式写入

你可以反复写入,但系统不会立马执行,而是放在缓冲区,直到文件对象关闭,才将所有内容写入磁盘,因此又得异常处理

with open('D:\\gittrash\\bug.txt','w') as f:
    f.write("123")

其次需要注意,'w'写入模式,会将原来的文件覆盖,如果不想覆盖原来文件,添加参数a,将在最后一行继续写入
f1 = open('D:\\gittrash\\bug.txt','a')
posted @ 2023-01-14 23:43  HugoWang010220  阅读(118)  评论(0)    收藏  举报