本篇博客简单记录一下Python 下关于文件读写的操作:

主要介绍文件读写过程中遇到的一下几个函数:

目录

1、open(file, mode='r', encoding=None, errors=None)

2、write(string)

3、readlines()

4、readline()

5、read()

6、文件异常处理


下面通过代码一一演示简单用法:

1、open(file, mode='r', encoding=None, errors=None)

功能:主要作用打开文件返回一个文件描述符、也称文件句柄,在程序中文件操作符就代表了打开的文件,

参数说明:

file: 要操作的文件名

mode: 打开文件的方式,主要使用的有:w:写,若写入的文件不为空吗,则会清空原有内容,再进行写、wb:二进制写、r:读、rb:二进制读文件、a:在原有文件的基础上追加写、不会删除文件原有内容

encoding: 文件编码方式,操作不同格式文件时需要指定,为了方便自己以后对文件的读写,最好每次都加上该参数,可选内容:utf-8、gbk

errors: 错误处理方式,目前我遇到的情况是,当遇到一个文件中有个别字符不能以指定的编码方式解析时(一个文件存在两种编码方式),就会报错;这时需要设置该参数:errors=ignore,忽略编解码错误

2、write(string)

功能:将字符串写入到文件中

参数: 字符串

下面通过代码演示用法:

fw = open("test.txt", "w", encoding="utf-8")

writeLine1 = "---------start--------\n"
writeLine2 = "This is line2\n"
writeLine3 = "\n"
writeLine4 = "This is Line3\n"
writeLine5 = "---------end----------\n"

fw.write(writeLine1)
fw.write(writeLine2)
fw.write(writeLine3)
fw.write(writeLine4)
fw.write(writeLine5)

fw.close()

上述代码以 utf-8的编码方式、以文本写入的形式:w、打开名为test.txt的文件

此时当前文件夹下会多出一个名为test.txt的文件,内容如下:

pythontxt文本边写入边语音输出 python边读边写_文件异常处理

write() 函数会将给定的字符串原封不动的写入到文件中,所以在写入字符串时,需要自己添加换行符

通过上边程序可以看到在最后我们调用了fw.close(),对文件操作符进行关闭,但是当程序太长时,有可能我们就会忘记调用fw.close(),关闭文件操作符,这时就会导致不可预料的异常发生,如:存在于缓存中的内容不能完整写入到文件、打开过多操作符造成系统资源的浪费,下面介绍另一种文件打开方式,让系统自动调用close()

3、readlines()

with open("test.txt", "r", encoding="utf-8") as fr:
    allLines = fr.readlines()
    print(allLines)
    print("===================================")
    for line in allLines:
        print(line, end='')

这次文件操作通过with open() as fr: 的形式进行文件操作,通过这种方式就不必手动调用close()

上面代码以utf-8编码方式读取文件test.txt

运行结果如下:

['---------start--------\n', 'This is line2\n', '\n', 'This is Line3\n', '---------end----------\n']
===================================
---------start--------
This is line2

This is Line3
---------end----------

通过运行结果可知:readlines() 会将整个文本内容读取到一个列表中,其中文本的每一行为列表的一个元素

我们通过for循环的形式遍历了整个列表并原样打印出来

但这种文件读取形式会存在一定问题,当文件过大时,会造成瞬时占用大量的内存空间

4、readline()

with open("test.txt", "r", encoding="utf-8") as fr:
    line = fr.readline()
    while line:
        print(line, end='')
        line = fr.readline()

readline() 按行读取文件,whlie 判断是否读取到了文件结尾,其中空行是包含换行符的,所以会判断空行不是文件结尾,具体结果如下:

---------start--------
This is line2

This is Line3
---------end----------

5、read()

如果不想按照行的形式对文件进行处理,也可以通过read() 函数指定每次读取的字节数:

with open('test.txt', 'r', encoding='utf-8') as fr:
    str_ = fr.read(5)
    print(str_)

读取test.txt 的5个字节,结果如下:

-----

6、文件异常处理

with open('test_err.txt', 'r', encoding='utf-8') as fr:
    line = fr.readline()
    print(line)
    
print("test for exception")

当我们打开一个不存在的文件 test_err.txt 时,程序会直接报错并且终止运行,结果如下:

FileNotFoundError                         Traceback (most recent call last)
<ipython-input-26-19f9d771b63d> in <module>()
----> 1 with open('test_err.txt', 'r', encoding='utf-8') as fr:
      2     line = fr.readline()
      3     print(line)
      4 
      5 print("test for exception")

FileNotFoundError: [Errno 2] No such file or directory: 'test_err.txt'

从结果可以看到程序崩溃,并没有执行 print("test for exception")

如果文件不存在,我们希望程序继续执行而不崩溃,这时就需要对异常进行捕获,python的异常捕获采用try...except 语句,具体用法如下:

try:
    with open('test_err.txt', 'r', encoding='utf-8') as fr:
        line = fr.readline()
        print(line)
except Exception as errors:
    print("捕获到文件异常")
    print(errors)
    
print("test for exception")

运行上面程序会产生以下输出:

捕获到文件异常
[Errno 2] No such file or directory: 'test_err.txt'
test for exception

从结果可以发现程序捕获到了文件不存在异常,我们利用print(errors)输出了异常信息,现在程序并没有崩溃,而是执行了print("test for exception"),正常结束