[Python进阶] Python处理txt文件:open

发布时间:2024年01月04日

7.1 Python处理txt文件:open

在Python中,通过open函数可以打开一个文件,创建一个file对象,然后对该对象进行读写。
函数语法:

open(name[, mode[, buffering]…])
参数说明:
name:文件名
mode:文件打开的模式:只读,写入,追加等。这个参数是非强制的,默认文件访问模式为只读?。常见的模式及其说明如下:

模式操作文件不存在是否覆盖
r只读报错-
r+读写报错
w只写创建
w+读写创建
a只写创建否,追加写
a+读写创建否,追加写

buffering : 如果 buffering 的值被设为 0,就不会有寄存。如果 buffering 的值取 1,访问文件时会寄存行。如果将 buffering 的值设为大于 1 的整数,表明了这就是的寄存区的缓冲大小。如果取负值,寄存区的缓冲大小则为系统默认。
encoding:指定的编码格式
file 对象方法:
file.read([size]):size 未指定则返回整个文件,读到文件尾时返回空字串。
file.readline():返回一行。
file.readlines([size]) :返回包含size行的列表, size 未指定则返回全部行。
f.write(“hello\n”):如果要写入字符串以外的数据,先将他转换为字符串。
f.tell():返回一个整数,表示当前文件指针的位置(就是到文件头的字节数)。
f.seek(偏移量,[起始位置]):用来移动文件指针。

偏移量: 单位为字节,可正可负
起始位置: 0 - 文件头, 默认值; 1 - 当前位置; 2 - 文件尾
f.close() 关闭文件

7.1.2 打开txt文件并读取内容

1、我们先新建一个txt文本文件,写入内容如下:

离离原上草,一岁一枯荣。
野火烧不尽,春风吹又生。

2、保存该文件,以GBK编码方式。下图中的ANSI编码指的是当地的默认编码,在中国就是GBK
在这里插入图片描述

3、一般我们是通过上下文管理器来打开文件的,这样就可以避免忘记手动关闭文件。我们可以通过下面的代码读取并输出txt内容:

with open('test.txt') as f:
    print(f.read())

离离原上草,一岁一枯荣。
野火烧不尽,春风吹又生。

这种打开的方式,并没有指定encoding编码,默认使用GBK打开。如果txt文件默认的是GBK则可以正常打开,否则会报错。我们将之前的txt文件的编码改成utf-8后则报错如下:

Traceback (most recent call last):
File “E:\Syncdisk\PythonFiles\t5.py”, line 2, in
print(f.read())
UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0xa6 in position 4: illegal multibyte sequence

这个时候,我们就可以指定open函数中的encoding参数,如下:

with open('test.txt', encoding='utf-8') as f:
    print(f.read())

那么现在又有个新问题了,对于不知道txt文件编码格式的,我们怎么打开呢?总不可能每次都手动打开txt文件,查看编码格式之后再调用open函数来打开吧。
这里我们可以通过检测编码,得到编码后再通过检测到的编码格式解码结果:

from chardet import detect


def myread(fn):
    with open(fn, mode='rb') as f:
        Bytes = f.read()
        encode = detect(Bytes)['encoding']
        if encode:
            if encode.lower() in ['gbk', 'gb2312']:
                return Bytes.decode('GB2312', 'ignore')
            elif encode.lower() in ['utf-8-sig']:
                return Bytes.decode('utf-8-sig', 'ignore')
            else:
                return Bytes.decode('utf-8', 'ignore')


print(myread('test.txt'))

离离原上草,一岁一枯荣。
野火烧不尽,春风吹又生。

7.1.3 将文本写入到txt文件中

with open('test.txt', mode='w+') as f:
    f.write("""
    i love python
    i love python
    i love python
    """)
    f.seek(0)  # 这里需要将文件指针指向文件头,否则下面的read函数无法读取文件。
    print(f.read())

i love python
i love python
i love python

文章来源:https://blog.csdn.net/crleep/article/details/135378892
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。