文本文件可存储的数据量是非常多的。每当需要分析或修改存储在文件中的信息时,首先就是读取文件到内存中,为此可以一次性读取文件的全部内容,也可以以每次一行的方式逐步读取。

1.读取文件

1.1读取整个文件

要读取文件,需要一个包含几行文本的文件。下面首先来创建一个poems文本文件,,里面存储着一首古诗。

读取文件,其语法格式如下所示:

注意这个文本文件是utf-8编码格式的,如果是windows默认的gbk模式,在读取时可能存在错误编写程序如下所示:

在这个程序中,with open('poems.txt') as poems_file: 这条语句做了大量的工作。

1.open函数。要以任何方式使用文件,哪怕仅仅是输出其内容,都得先打开文件,这样才能访问它。

2.open函数接受一个参数,这个参数是要打开的文件的名称。Python在当前执行的文件所在的目录中查找指定的文件。

3.open函数返回一个表示文件的对象,Python将这个对象存储在as后面的变量中。

4.关键字with再不需要访问文件后将其关闭。在这个程序中,注意到我们调用了open函数。但没有调用close函数。这里可以调用open函数和close函数来打开和关闭文件。但这样做时,如果程序存在bug,导致close语句未执行,文件将不会关闭。如果未妥善地关闭文件可能会导致数据丢失或受损。但如果在程序中过早的调用close(),那么在我们使用文件的时候它已关闭,我们无法访问。并非在任何情况下都能轻松确定关闭文件的恰当时机,但通过使用前面所示的结构,可让Python去自行确定,我们只管打开文件,并在需要时使用它,Python会在合适的时候自动将其关闭。

5.有了poems.txt文件对象变量,我们使用read方法读取这个文件的全部内容,并将其作为一个字符串存储在变量poems_content中。

1.2.逐行读取

读取文件时,常常需要检查其中每一行;可能要在文件中查找特定的信息或者要以某种方式修改文件中的文本。要以每次一行的方式检查文件,可对文件对象使用for循环:

我们打印每一行时,发现多出来了空白行,因为在这个文件中,每行的末尾都有一个看不见的换行符,而print函数也会加上一个换行符,因此每行末尾都有两个换行符:一个来自文本,一个来自print函数。要消除这些多余的空白行,可以将文本的换行符删除,或者让print函数不输出换行符

方法1,rstrip函数用于删除字符串末尾的换行符,编写程序如下所示:

方法2,print函数不输出换行符,编写程序如下所示:

2.结合列表

2.1创建一个包含文件各行内容的列表

使用withi关键字时,open函数返回的文件对象变量只在with代码块内可用。如果要在with代码块外访问文件的内容,可在with代码块外使用该列表。

编写程序如下所示:

2.2利用列表对文件的内容进行操作

我们发现上面输出的list列表中,数据元素是带有'\n'换行符的,我们如何删除它,这里也是用到rstrip函数,编写程序如下所示:

3.写入文件

保存数据的最简单的方式之一是将其写入到文件中,通过将输出写入文件,即便关闭包含程序输出的终端窗口,这些输出也依然存在。可以在程序结束运行后查看这些输出,可与别人分享输出文件,还可编写程序来将这些输出读取到内存中并进行处理。

3.1写入空文件

要将文本写入文件,在调用open需要提供另一个实参变量,该实参变量是open函数操作文件的模式,告诉Python我们要写入打开的文件。为明白其中的工作原理,我们来将一条简单的消息存储到文件中,而不是将其输出到终端窗口。

其语法格式:

open('文件名称',文件模式)

编写程序如下所示:

我们打开new_file.txt查看一下

发现是我们想要的效果。

注意:

1.调用open函数时,提供了两个实参变量,一个是文件名称,另一个是文件模式。

实参变量值 文件模式
'r' 只读模式,默认模式
'w' 只写模式
'r+' 读写模式
'a' 附加模式

2.如果要写入的文件不存在,open函数将自动创建它。然而,以写入模式打开文件时千万要小心,因为如果指定的文件已经存在,Python将在返回文件对象前清空该文件。

3.write是文件对象的写入方法,作用是将一个字符串写入文件。

4.Python只能将字符串写入文本文件,要将数值数据存储到文本文件中,必须先使用str函数将其转换为字符串格式。

3.2写入多行

write函数不会在写入的文本末尾添加换行符,因此如果写入多行时没有指定换行符,文件看起来可能不是我们预想的结果:

编写程序如下所示:

我们打开new_file.txt查看一下,

发现两个字符串连接在一起了。

要让每个字符串都单独占一行,需要在write()语句中包含换行符,编写程序如下所示:

我们打开new_file.txt查看一下

3.3附加到文件

如果要给文件添加内容,而不是覆盖原有的内容,可以用附加模式打开文件。以附加模式打开文件时,Python不会在返回文件对象时清空文件,而是将写入到文件的行都添加到文件末尾。如果指定的文件不存在,Python将创建一个空文件。

编写程序如下所示:

我们打开new_file.txt,查看一下,

我们可以发现,文件原来的内容还在,最后的两行是我们新添加的内容。

【python基础】文件-初识文件的更多相关文章

  1. 第三章:Python基础の函数和文件操作实战

    本課主題 Set 集合和操作实战 函数介紹和操作实战 参数的深入介绍和操作实战 format 函数操作实战 lambda 表达式介绍 文件操作函数介紹和操作实战 本周作业 Set 集合和操作实战 Se ...

  2. python基础——元组、文件及其它

    Python核心数据类型--元组 元组对象(tuple)是序列,它具有不可改变性,和字符串类似.从语法上讲,它们便在圆括号中,它们支持任意类型.任意嵌套及常见的序列操作. 任意对象的有序集合:与字符串 ...

  3. python基础知识六 文件的基本操作+菜中菜

    基础知识六 文件操作 ​ open():打开 ​ file:文件的位置(路径) ​ mode:操作文件模式 ​ encoding:文件编码方式 ​ f :文件句柄 f = open("1.t ...

  4. Python基础7:文件操作

    [ 文件操作] 1 对文件操作流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 现有文件如下: 昨夜寒蛩不住鸣. 惊回千里梦,已三更. 起来独自绕阶行. 人悄悄,帘外月胧 ...

  5. python基础3之文件操作、字符编码解码、函数介绍

    内容概要: 一.文件操作 二.字符编码解码 三.函数介绍 一.文件操作 文件操作流程: 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 基本操作: #/usr/bin/env ...

  6. python基础之删除文件及删除目录的方法-乾颐堂

    下面来看一下python里面是如何删除一个文件及文件夹的~~ 首先引入OS模块 import os 删除文件: os.remove() 删除空目录: os.rmdir() 递归删除空目录: os.re ...

  7. 2015/9/9 Python基础(10):文件和输入输出

    文件对象文件对象不仅可以用来访问普通的磁盘文件,而且也可以访问其它任何类型抽象层面上的“文件”.一旦设置了合适的“钩子”,你就可以访问文件类型接口的其它对象,就好像访问的是普通文件一样.文件对象的处理 ...

  8. python基础之删除文件及删除目录的方法

    下面来看一下python里面是如何删除一个文件及文件夹的~~ 1 2 3 4 5 6 7 8 #首先引入OS模块 import os #删除文件:  os.remove() #删除空目录:  os.r ...

  9. Python基础:25文件

    一:文件对象 文件对象不仅可以用来访问普通的磁盘文件, 而且也可以访问任何其它类型抽象层面上的"文件". 一旦设置了合适的"钩子", 你就可以访问具有文件类型接 ...

  10. python基础dict,集合,文件

    字典是一种key:value的数据类型dict1{ 'stud1':'孙礼昭', 'stud2':'slz', 'stud3':'sunlizhao',}dict是无序的,key是唯一的  天生去重增 ...

随机推荐

  1. [JavaScript]Promise:异步编程

    1 文由 某项目的需求:先要请求API1,再以API1的结果请求API2. var n, a; //var r = window.md5; var r = function (password, us ...

  2. [Java]排序算法>插入排序>【折半插入排序】(O(N*N)/稳定/N较大/无序/顺序存储)

    1 折半插入排序 1.1 算法思想 相比于[直接插入排序]:采用"顺序查找法"查找当前记录在已排好序的序列中的插入位置, 折半插入排序利用"折半查找法"快速查出 ...

  3. 在英特尔 CPU 上加速 Stable Diffusion 推理

    前一段时间,我们向大家介绍了最新一代的 英特尔至强 CPU (代号 Sapphire Rapids),包括其用于加速深度学习的新硬件特性,以及如何使用它们来加速自然语言 transformer 模型的 ...

  4. DG:switchover切换操作

    问题描述:我们配置DG的目的就是为了在主库出现故障时,备库能够提供服务,保证业务的正常运行,switchover是用户有计划的进行停机切换,能够保证不丢失数据,我记录一下我进行switchover中的 ...

  5. pandas小技巧

    1. 删除列 import pandas as pd df.drop("Unnamed: 0", axis=1, inplace=True) 2. 转换列的格式 df[" ...

  6. 基于QtAV的简易播放器(开源)

    这个开源代码,是我利用QtAV源码,提取其中一部分代码,进行整合到我自己项目中,做的一个小型播放器测试,至于怎么安装一些环境以及QtAV源码编译在我以前写的一篇博客中可以看到(Qt第三方库QtAV-- ...

  7. windows11 下使用 阿里云 modelscope docker 环境 运行参考

    昨天看视频 我们做了个能对话的AI派蒙,免费给大家玩! 发现阿里有一个语音转文字的模型(paraformer),之前处理这种需求一直都是直接调用服务商提交好的API接口 突然想尝试一下本地搭建,虽然和 ...

  8. flink之Sink to MySQL和Redis

    前言 下面这篇文章是使用Flink的Sink 写出数据到Redis和MySQL Flink之Sink写入Redis和MySQL Flink需要添加Sink的时候,需要自己去添加写Sink,我们可以实现 ...

  9. 推荐一个.Net Core开发的Websocket群聊、私聊的开源项目

    今天给大家推荐一个使用Websocket协议实现的.高性能即时聊天组件,可用于群聊.好友聊天.游戏直播等场景. 项目简介 这是一个基于.Net Core开发的.简单.高性能的通讯组件,支持点对点发送. ...

  10. SQLLabs靶场 less11-20

    SQLLabs靶场 less11-20 Less-11-16 请求方式 注入类型 拼接方式 POST 联合.报错.布尔盲注.延时盲注 username='x'11 请求方式 注入类型 拼接方式 POS ...