洗礼灵魂,修炼python(19)--文件I/O操作,linecache,fileinput模块

Python linecache.getline()读取文件中特定一行的脚本 比如: import linecacheprint linecache.getline(‘2.1_open.py’, 4)将返回我上一节事例代码文件2.1_open.py的第4行文字,输出结果:f = open(‘/home/evergreen/桌面/test’)查看linecache中的实现(我用的是Ulipad,所以直接将光标停留在linecache处,按F6键) 您可能感兴趣的文章:python逐行读取文件内容的三种方法Python按行读取文件的简单实现方法Python3读取文件常用方法实例分析Python实现读取文件最后n行的方法Pyth 立即下载

文件I/O操作

1.什么是文件I/O操作

首先I/O(input/output),即输入/输出端口,然后文件,大家应该都是是什么,一个数据,一个txt或者html文档就是一个文件。文件操作就是对文件进行读写删除等的操作。文件I/O操作,个人理解,就是与用户有交互式的文件操作,换句话就是读写操作

文件也是一个可迭代对象

2.有哪些操作:

1):I/O操作:raw_input函数,input函数即可以进行I/O操作,也就是前面说的让代码活起来,这里不再赘述

2):文件操作:

打开关闭文件:

  1. 打开文件:
    1.   open/with open/file
    2.   f=open('c:/xxx.txt')
    3.   f=file('c:/xxx.txt')(这个写法是python2特有,和open一样的)
    4.   with open('c:/xxx.txt') as f:suite
  2. 关闭文件:close(),如果使用with则不必考虑文件关闭问题,会自动关闭文件

 

读写操作:

r以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
r+打开一个文件用于读写。文件指针将会放在文件的开头。
rb+以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
w打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
w+打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb+以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+

以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

xb

以可写入的二进制形式打开

x,w都是可写入模式,X是如果路径下存在同名文件则抛出异常,但是w不管存在否,不存在则新建,存在则覆盖


当文件对象创建成功后,会自带一些文件属性:

 (以下的方法或者属性都很简单,不演示,自行练习)

f.fileno():文件描述符,描述文件大小

f.readlines():以列表形式返回所有行,每一行作为列表元素,包括行结束符(换行符\n等)

f.readline():每一次只返回一行,包括行结束符

f.next():以迭代的方式,不会移动文件指针

f.tell():返回当前指针在文件中的位置,换句话就是告诉你文件内的当前位置

f.name:属性,不为方法,不加括号,读取文件名字【什么是属性,个人理解,即不能加括号来实例化后进行调用的方法】

f.flush():将缓冲区的进程结束,内容保存到文件里

f.xreadlines():比readlines更高效的方法,但已废弃

f.isatty():判断该文件是否为终端设备文件,返回一个bool值

f.truncate(size):窃取文件,内容并只保存size个字节

f.closed :属性,不加括号,判断文件是否已关闭,返回bool

f.mode :属性,获取当前文件的打开方式

f.newlines:属性,本身为换行符,行结束符字符串,如果没有读取到则返回none

f.softspace:属性,软空间,0表示输出一段数据后加入一个空格,1表示不加

f.seek(offset[, whence]):重新定位指针位置(指针这个概念很重要,很多语言都有,自行体会)

  • offset -- 开始的偏移量,也就是代表需要移动偏移的字节数

  • whence:可选,默认值为 0。给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起

 

 

w:就是在指针指向文件内容开头位置写入

a:就是在指针指向文件内容结尾写入

以上的属性可以赋值

 

读取返回出文件内容:

使用迭代法: 

for I in f:  #这里直接迭代文件,效率更高,不用使用list转化为列表在迭代,并且效率不高

  pirnt (i)

注意:

读取文件:

f=open('python.txt')

for i in f:

    print(i)

此时迭代时f不加.read()则是一行一行输出,迭代时f加.read()则是一个字符逐个输出,这一点很重要

 

linecache

1.作用

linecache模块允许从任何文件里得到任何的行,并且使用缓存进行优化,常见的情况是从单个文件读取多行

此模块使用内存来缓存文件内容,这是需要耗费内存的,打开文件的大小和速度和电脑的内存大小有关系

2.函数:

常用函数:

linecache.checkcache(filename):检查缓存的有效性。如果在缓存中的文件在硬盘上发生了变化,并且你需要更新版本,使用这个函数。如果省略filename,将检查缓存里的所有条目。

linecache.clearcache():清除缓存。如果你不再需要先前从getline()中得到的行。读取文件之后,如果不需要使用文件的缓存时,需要在最后清理一下缓存,使linecache.clearcache()清理缓存,释放缓存。

linecache.getline(filename,lineno):从名为filename的文件中得到第lineno行。这个函数从不会抛出一个异常–产生错误时它将返回”(换行符将包含在找到的行里)。如果文件没有找到,这个函数将会在sys.path搜索。

linecache.getlines(filename):从名为filename的文件中得到全部内容,输出为列表格式,以文件每行为列表中的一个元素,并以linenum-1为元素在列表中的位置存储

linecache.updatecache(filename):更新文件名为filename的缓存。如果filename文件更新了,使用这个函数可以更新linecache.getlines(filename)返回的列表。

 

注意:使用linecache.getlines('XXX.txt')打开文件的内容之后,如果XXX.txt文件发生改变,当再次用linecache.getlines获取的内容并不是文件的已改变的内容,还是之前的内容,此时有两种方法:

  • 使用linecache.checkcache(filename)来更新文件在硬盘上的缓存,然后在执行linecache.getlines('XXX.txt')就可以获取到XXX.txt的最新内容;
  • 直接使用linecache.updatecache('XXX.txt'),即可获取最新的a.txt的罪行内容

其实linecache模块和文件操作很像对不?确实有点像,功能也差不多,用时自行选择:

fileinput

因为这个模块用得不是很多,基础概念已经有网友总结的很好了,所以下面部分内容我直接转载别人的,原帖:Python中fileinput模块介绍

1.作用:

fileinput模块可以对一个或多个文件中的内容进行迭代、遍历等操作。该模块的input()函数有点类似文件readlines()方法,区别在于前者是一个迭代对象,需要用for循环迭代,后者是一次性读取所有行。

 

用fileinput对文件进行循环遍历,格式化输出,查找、替换等操作,非常方便

2.函数:

 

fileinput.input()       #返回能够用于for循环遍历的对象

fileinput.input (files=None, inplace=False, backup='', bufsize=0, mode='r', openhook=None)

  • files:文件的路径列表,默认是stdin方式,多文件['1.txt','2.txt',...]
  • inplace:是否将标准输出的结果写回文件,默认不取代
  • backup:备份文件的扩展名,只指定扩展名,如.bak。如果该文件的备份文件已存在,则会自动覆盖。
  • bufsize:缓冲区大小,默认为0,如果文件很大,可以修改此参数,一般默认即可
  • mode:读写模式,默认为只读
  • openhook:该钩子用于控制打开的所有文件,比如说编码方式等

fileinput.filename()    #返回当前文件的名称

fileinput.lineno()      #返回当前已经读取的行的数量(或者序号)

fileinput.filelineno()  #返回当前读取的行的行号

fileinput.isfirstline() #检查当前行是否是文件的第一行

fileinput.isstdin()     #判断最后一行是否从stdin中读取

fileinput.close()       #关闭队列

 

 

 (以下则为本人原创总结)

文件替换操作时,是可以实现,但是会修改源文件格式,添加字符串符号,换行符等的,排列也有问题,源文件留下,更改文件放在其后:

有点问题是不?别着急,我们进行测试一下:

fileinput(filename,inplace=0)中,先看inplace的作用:(不给出inplace则默认为0)

 

上面的replace是字符串的替换方法,如果没给出inplace则只是输出,但不会修改源文件

 

当inplace=1时:

 

当同样的操作,给出input为1之后,源文件发生改变,而带有backup=’bak’时,源文件修改的同时会备份源文件并在原来基础上加上backup参数的后缀,换句话就是备份一个源文件,然后再在源文件上修改。这样的操作在编程开发时是很需要的

 

看出什么没?是的,可以看出:如果不加inplace, 即默认为0,inplace=0则对比输出,不会修改源文件的;当inplace=1时不输出,修改源文件

 

以上的都是围绕I/O文件操作,多练习,多总结

RV1126 ISP调参实战:3A算法参数调节的7个技巧 ││ │ DEMOSAIC (去马赛克) │ ││ │ GAMMA (Gamma 校正) │ ││ │ DPC (坏点校正) │ ││。 阅读详情

相关推荐

告别密码明文传输:手把手带你用Python实现SRP-6协议(附完整代码)

本文详细介绍了如何使用Python实现SRP-6协议,确保密码安全传输和存储。通过零知识证明与密钥交换技术,SRP协议在不传输明文密码的情况下完成认证,适用于金融App等高安全需求场景。文章包含完整代码示例和实战技巧,帮助开发者规避常见安全陷阱。

weixin_30689307的博客 412

常用模块linecache学习

目录简介常用函数基本使用 简介 linecache 模块允许从 Python 源文件中随机读取指定行,并在内部使用缓存优化存储。由于该模块主要被设计成读取 Python 源文件,因此它会用 UTF-8 字符集来读取文本文件。 实际上,使用 linecache 模块也可以读取其他文件,只要该文件使用了 UTF-8 字符集存储。 常用函数 linecache 模块包含以下常用函数: linecache...

爱喝水的qdy的博客 901

YOLOv8剪枝实战:基于torch_pruning的模型优化与性能提升指南

本文详细介绍了如何使用torch_pruning工具对YOLOv8模型进行结构化剪枝,以实现模型轻量化与性能提升。通过实战步骤解析,包括环境搭建、依赖图分析、迭代剪枝与微调策略,帮助开发者有效减少模型参数量和计算量,提升在边缘设备上的推理速度,同时保持检测(detect)与分割(segment)任务的精度。

water的专栏 1122

python 之 linecache 用法记录

linechche是用来读取文件的,他与传统的f = open('./test.txt','r')相比,当所需读取的文件比较大时,linecache将所需读取的文件加载到缓存中,从而提高了读取的效率。 1.最常用的方法1:getline(filename, lineno[, module_globals]) content = linecache.getline(path,line_index) 获得path文件的第line_index行的内容。 2.最常用的方法2:getlines(filena

qq_41368074的博客 3626

使用Matlab simulink的PLC coder功能进行算法搭建与处理

使用的案例如下: Anti-Windup PID Control Demonstration with Feedforward Control 将其中的PID块生成SCL语言再导入TIA 使用的平台如下: Matlab 2019b TIA portal 15.1 应用:可以在PLC中搭载一些并不方便使用的,或者比较难使用的算法 步骤如下: 首先打开案例,案例地址我放在最下面,点击Run运行仿真,必...

苦走一口田 1万+

KEPServerEX 6 之驱动协议(UDD)实战 HTTP协议对接OpenWeatherMap天气 API全流程指南

本文分享了基于 KEPServerEX 6 的通用设备驱动(UDD)对接OpenWeatherMap天气API的实战方案。该方案针对工业物联网场景进行了深度优化,具有动态城市切换、运行时热配置、老旧JS引擎兼容等核心特性。文章详细介绍了从环境准备、脚本部署到Tag配置的全流程,重点解析了Legacy JS语法适配、Float类型安全处理等关键实现细节,并提供了完整的避坑指南和故障排查方法。该方案经过生产环境验证,可稳定实现气象数据采集与动态切换功能,适用于SCADA/MES系统集成场景。

-雲飛兄-博客 712

4.4、linecache:随机读取文件指定行

linecache:随机读取文件指定行

融码一生:专注 Python、C/C++、Linux、机器学习 & 深度学习、NLP、算法领域分享 505

从零开始学习CANoe(三)—— 系统变量的创建和使用

从零开始学习CANoe(三)—— 系统变量的创建和使用

蚂蚁小兵 1万+

python:linecache --- 随机读写文本行

python:linecache --- 随机读写文本行

FuncPlotCalc 448

Three 之 three.js (webgl)绘制物体模型尺寸虚线包围框工具简单封装 DashLinesBoxTool

Three js 开发的一些知识整理,方便后期遇到类似的问题,能够及时查阅使用。本节介绍, three.js (webgl) 中绘制物体模型尺寸虚线包围框工具简单封装 DashLinesBoxTool,主要是给实物绘制线框,有点像AI 识别正方形包裹框的效果。其中,如果有不足之处,欢迎指出,或者你有更好的方法,欢迎留言。

仙魁XAN 2106

4、海洋哺乳动物运动能量学:潜水与生存的奥秘

本文深入探讨了海洋哺乳动物在潜水与运动中的能量消耗机制,涵盖其生理反应、代谢成本、节能行为策略及测量方法。通过分析不同物种的能量利用特点,揭示了它们如何在极端水下环境中维持能量平衡,并讨论了该研究在保护生物学、生态系统动态和动物健康管理中的实际意义。文章还展望了未来多学科交叉、长期监测及应对环境变化的研究方向,为理解海洋哺乳动物的生存奥秘提供了系统性视角。

p5l2m9n4o6q的博客 116

详解python linecache模块读取文件的方法

参考链接:http://blog.youkuaiyun.com/my2010sam/article/details/38022041pythonlinecache模块读取文件在python中,有个好用的模块linecache,该模块允许从任何文件里得到任何的行,并且使用缓存进行优化,常见的情况是从单个文件读取多行。linecache.getlines(filename)从名为file...

weixin_34221775的博客 324

面向业务角色的 SAP Fiori Space 与 Page 创建全流程实战指南

业务角色导航设计:从Space与Page规划到实施 摘要:本文探讨了SAP S/4HANA Cloud和BTP ABAP环境中基于业务角色的导航设计方法。传统Fiori Launchpad的Group+Tile模式存在应用堆积问题,而新的Space与Page模型将导航按工作领域(如应付会计、销售代表)组织,每个Space包含多个任务导向的Page。文章详细介绍了从业务角色建模到Space/Page创建、分配的完整流程,包括核心概念解析、规划思路和具体操作步骤。重点阐述了如何根据业务需求选择创建方式(基于预交

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 183

python 读取文件的三种方式,linecache模块读取文件

python 读取文件的三种方式,以及linecache模块 read(),readline(),readlines()是python读取文件常用的三种方式,下面看看这三种方式读取文件的区别 首先准备一个TestRead.txt文档,内容如下: 使用read()方法读取文件,f.read()会一次读取全部内容(一定要记得读取之后使用f.close()关闭文件,以便尽早的释放所占用的系统资源并尽早将文件置于更安全的状态) with open(r"E:\Anaconda\Pythoncode\TestRe

weixin_42070139的博客 1234

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

python 笔记linecache.getline() 识别只支持默认的utf-8格式的txt文件

linecache.getline() 识别只支持默认的utf-8格式的txt文件

weixin_45633407的博客 766

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

详解python linecache模块读取文件的方法 分类: python...

本节主要内容: python linecache模块读取文件 在python中,有个好用的模块linecache,该模块允许从任何文件里得到任何的行,并且使用缓存进行优化,常见的情况是从单个文件读取多行。 linecache.getlines(filename) 从名为filename的文件中得到全部内容,输出为列表格式,以文件每行为列表中的一个元素,并以linenum-1为元素在...

weixin_30517001的博客 896

linecache.getline()缓存问题

在使用linecache.getline()函数时,重复给text赋值,值却不变的原因:linecache.getline()存在缓存问题,导致第二次重新赋值时依然获取的第一次的内容,未拿到最新的值,重新赋值前使用linecache.clearcache()清除缓存即可。

asdfghjklllllqwe的博客 330

Python 文件行缓存:linecache 模块深度解析

linecache模块的主要作用是从文件中读取指定行的内容,并将文件内容缓存起来。这样,在后续再次访问同一文件的其他行时,就可以直接从缓存中获取,避免了重复的文件 I/O 操作,从而提高了程序的性能。该模块特别适用于需要多次随机访问文件特定行的场景,例如调试工具、日志分析等。linecache模块为 Python 开发者提供了一种高效的方式来随机访问文件的特定行。通过缓存文件内容,它避免了重复的文件 I/O 操作,提高了程序的性能。getlineclearcachecheckcache和getlines。

Tekin 是深耕技术 20 年的全栈实战派专家,精通 Go/Python/Java 等多语言开发。博客专注技术原理与实战结合,深度解析 Python 高阶编程、Go 语言架构、数据库优化等硬核内容。涵盖并发编程、机器学习、云原生等前沿领域,通过真实案例拆 1337

Python linecache模块

linecache模块 通过用它可以方便地获取某一文件某一行的内 例如,你想获取input.txt中的第8行,你可以这样: 1.引入这个库 import linecache 2.调用getline()函数 line = linecache.getline('input.txt',8).strip() linecache.getline () 第一参数是文件名,第二个参数是行编号。如果文件名不能...

Zero_chenda的博客 941

python linecache模块读取行更新

python linecache模块读取行更新

RyanLee90的博客 523

Python fileinput模块详解

Python的fileinput模块可以快速对一个或多个文件进行循环遍历。 import fileinput for line in fileinput.input(): process(line) fileinput.input([files[, inplace[, backup[, bufsize[, mode[, openhook]]]]]]) fi...

243

读取文件指定行linecache

import linecache poem = '''\ Programming is fun When the work is done if you wanna make your work also fun:         use Python! ''' f = file('poem.txt', 'w') f.write(poem) f.close() file_t =

Just for doing.. 1851

python--用linecache模块方便提取文本数据

需求: 工作中生成的日志是固定格式的大量数据,需要从每个日志中提取固定的几行值,对其汇总,用于统计分析工艺参数。 需要日志内容如图: 解决: python自带的linecache模块中getline方法简单好用,可直接提取文件中对应行的内容 #!/usr/bin/python#-*-coding:UTF-8-*-#data_filter...

weixin_34375054的博客 228

Python中fileinput模块介绍

fileinput模块可以对一个或多个文件中的内容进行迭代、遍历等操作。该模块的input()函数有点类似文件句柄 readlines()方法,区别在于前者是一个迭代对象,需要用for循环迭代,后者是一次性读取所有行。用fileinput 对文件进行循环遍历,格式化输出,查找、替换等操作,非常方便。

杰瑞的专栏 2万+

032 Python语法之linecache-行缓冲

行缓冲 内部使用的原理是二分查找法 只能适用于utf-8 使用方式 import linecache #linecache仅仅处理utf-8编码文件, #随机跳到哪一行 path=r"G:\data\优快云数据\csdn.txt" linecache.updatecache(path) #抓取路径进行预处理 print("OK") mylist=linecache.getlines(pat...

runnoob_1115的博客 376

第六章:文件系统-linecache:高效读取文本文件-错误处理

6.5.4 错误处理 如果所请求的行号超出了文件中合法行号的范围,则getline()会返回一个空串。 import linecache from linecache_data import * filename = make_tempfile() # The cache always returns a string,and uses # an empty string to indicat...

编程菜鸟iglesias的博客 255
上一篇: 洗礼灵魂,修炼python(18)--温故加知新
下一篇: 洗礼灵魂,修炼python(20)--自定义函数(1)—基础概念
geekbyte.
博客等级 码龄11年 308粉丝 75原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值