Python 读取文本文件的内容

题图:by ourclickdays from Instagram

阅读文本大概需要 4 分钟。

数据存储方式有很多种。如果数据的数据量比较大、数据类型繁多且要求便于搜索,我们一般会选择存储到数据库中。如果数据内容只是一些的文本信息,我们可以将数据存储到 TXT 、JSON、CSV 等文本文件中。类似存储小说、日志内容等场景,一般是将内容存储到文本文件中。数据已经存储到 txt 文件中,那该如何读取了?本文的主要内容是讲解如何读取文本文件的内容。

1 打开文件

文本操作可以想象成对水池进行加水和排水。文本文件就好比一个存储水的水池,数据就类似水。从文本文件中读取数据好比让水池排水。在这过程中,我们需要一条“管道”才能从读取到数据。在 Python 语言中,open() 函数就是这样的“管道”。当 open() 函数成功打开文件后,我们会得到一个 file 对象。

file = open('One Day.txt', 'r')

但是操作文件经常会出现各种异常,例如文件不存在,文件不具备可读属性等。因此,我们需要做异常处理工作。这里推荐使用 with 语句,其内部已经实现异常处理相关的逻辑。另外还有一个好处,我们还可以不用调用 close() 函数来关闭文件。

with open('One Day.txt', 'r') as file:
    pass

open() 函数的第二个参数是打开模式。可以是只读r,写入w,追加a、以二进制形式读取rb等。

2 read()

read() 函数读取数据方式有点暴力。它是一次性将文件的全部内容读取到内存中。如果文件太多的话,会把内存给撑爆。为了保险起见,我们通常每次只读取一小段区间内容,然后反复调用。

# -*- coding:utf-8 -*-
size = 1024
with open('one day.txt', 'r') as file:
    print(file.read(size))

3 readline()

如果我们需要每次只读取一行内容,则需要用到readline() 函数。这种读取方式虽然效率不高,但是占用内存小,能做到即读即用。

# -*- coding:utf-8 -*-
import time

with open('one day.txt', 'r') as file:
    for line in file:
        # realine() 读取整行内容,包括 "\n" 字符
        print(file.readline().strip())
        time.sleep(1)

3 readlines()

realines() 函数跟read()类似,会一次性读取所有内容,然后按行返回一个 list 对象。这种读取方式速度会比较快。但随着文本的增大,占用内存会越来越多。一般读取配置文件,可以使用这种方法。

# -*- coding:utf-8 -*-
import time

with open('one day.txt', 'r') as file:
    for line in file.readlines():
        print(line.strip())
        time.sleep(1)

原文发布于微信公众号 - 极客猴(Geek_monkey)

原文发表时间:2018-07-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

27个Linux文档编辑命令

在许多UNIX说明文件里,都有RLF控制字符。当我们运用shell特殊字符">"和">>",把说明文件的内容输出成纯文本文件时,控制字符会变成乱码,col指令则...

20460
来自专栏向治洪

netty对http协议解析原理解析

本文主要介绍netty对http协议解析原理,着重讲解keep-alive,gzip,truncked等机制,详细描述了netty如何实现对http解析的高性能...

58980
来自专栏Golang语言社区

实效go编程--4

func handle(queue chan *Request) { for r := range queue { process(r)...

365150
来自专栏求索之路

Android数据层架构的实现 上篇

最近我们app的服务器吃不消了,所以我在为服务器增加缓存层之后,又想到在app端进行二级缓存以减少app对服务器的访问。我想很多app应该在项目的初期架构的时...

32880
来自专栏和蔼的张星的图像处理专栏

1.Win10+VsCode的C/CPP编译环境搭建

我是从开始学C++的时候就一直用的是visual studio,毕竟宇宙第一IDE,写和调试都是超级方便快捷,唯一的缺点可能就是启动慢一点。 之前电脑没有换固...

85860
来自专栏技术之路

go微服务框架go-micro深度学习(二) 入门例子

    上一篇帖子简单介绍了go-micro的整体框架结构,这一篇主要写go-micro使用方式的例子,中间会穿插一些go-micro的源码,和调用流程图,帮大...

1.9K50
来自专栏ml

web基础之Structs(一篇)

为什么有 struts 框架 Struct 的优点之处: 1.       struct的好处 2.       程序更加规范化 3.       程序的可...

39780
来自专栏解Bug之路

MySql-Binlog协议详解-报文篇

#MySql-Binlog协议详解-报文篇 紧接上篇流程篇,本篇主要将binlog的event报文。 ##Event报文分层 event报文主要分三层。 (1...

17030
来自专栏破晓之歌

vue中axios处理http发送请求的示例(Post和get)

axios中文文档:https://github.com/mzabriskie/axios#using-applicationx-www-form-urlenc...

25130
来自专栏DOTNET

log4net使用注意事项

1配置Log4net Log4net的配置文件有几种使用方式,这里将配置log4net的部分独立出来,即关于log4net的配置独立成文件log4net.con...

440120

扫码关注云+社区

领取腾讯云代金券