利用Python读取文本格式文件(.txt)的时候,存在多种方式进行读取,需要根据业务和数据特点来选择。本篇对比几种简单常用的读取方式。

python读取文件内容中文编码问题 python读取中文txt文件_python中文本打开时读写按照什么方式

数据文件

要打开的文本文件名称为 “ 数据文本文件 ”,和 python文件 - readtxt.py放置在同一个目录下,文件中的内容如下:

python读取文件内容中文编码问题 python读取中文txt文件_换行符_02

比较方便的方式是直接打开文件,保存为一个对象,然后逐行读取。

其中,open()是打开要读取的文件,r表示只读方式打开,encoding为编码。

这里用 with 的方法打开,不用再进行close()关闭文件的操作了,返回的fobj是一段数据对象,可以对其进行读取等操作。

python读取文件内容中文编码问题 python读取中文txt文件_python读取文件内容中文编码问题_03

python读取文件内容中文编码问题 python读取中文txt文件_数据_04

    对于从结果发现每行下面多了一行空行,因为输出时会自动添加一个换行符,解决办法是对每一行消除右边的换行符,即 改为print(line.rstrip())。

python读取文件内容中文编码问题 python读取中文txt文件_数据_05

一、read、readlines和readline

这三个都是Python自带的 I/O 接口。

1)read()可以直接读取整个文件,返回的是字符串类型。

python读取文件内容中文编码问题 python读取中文txt文件_数据_06

python读取文件内容中文编码问题 python读取中文txt文件_python读取文件内容中文编码问题_07

2)readlines()也是一次性读取整个文件,并其保存为一个列表,其中的每一行就是列表中的一项。这种方法对于特别大型的文件缺点是会多占用一些内存。

因为是列表,如果知道要提取的行数的话,可以用readlines()[10:50]读取特定行数内容(10-49行)。

python读取文件内容中文编码问题 python读取中文txt文件_python中文本打开时读写按照什么方式_08

python读取文件内容中文编码问题 python读取中文txt文件_python中文本打开时读写按照什么方式_09

3) readline()可逐行读取文件,好处是内存占用小,缺点是速度会慢(但是一般正常大小的文件感觉不出来区别),由于是逐行读取,所以要想遍历读文件的话,需要用循环结构语句来操作。

python读取文件内容中文编码问题 python读取中文txt文件_换行符_10

python读取文件内容中文编码问题 python读取中文txt文件_python读取文件内容中文编码问题_11

上面这几个方法中如果不需要隔一行显示,可用rstrip()来去掉换行符。

二、linecache

linecache()是Python自带的一个模块,使用前需要引用这个模块,其中getline("文件“ , 行数)可以读取特定行的数据,需要注意的是从0开始计数的,因此 下方的 第四行,其实提取的是文件中第5行的数据。

python读取文件内容中文编码问题 python读取中文txt文件_python中文本打开时读写按照什么方式_12

提取第5行的数据

python读取文件内容中文编码问题 python读取中文txt文件_python中文本打开时读写按照什么方式_13

linecahe.getline结果

三、枚举 enumerate

利用枚举方式,可以逐行的获取行号和内容

python读取文件内容中文编码问题 python读取中文txt文件_换行符_14

python读取文件内容中文编码问题 python读取中文txt文件_python中文本打开时读写按照什么方式_15

部分读取结果

python读取文件内容中文编码问题 python读取中文txt文件_python中文本打开时读写按照什么方式_16

除了上面这几种基本方式外,数据分析的时候还可以用pandas的模块read_csv()读取。

Tips:

打开文件时候的几个常用标识符:

r :   读取文件,文件不存在会报错

w:   写入文件,若文件不存在则会先创建再写入,会覆盖原文件

a :   写入文件,若文件不存在则会先创建再写入,不会覆盖原文件,追加在文件末尾

rb,wb:  用于读写二进制文件,例如图像、音频视频等。