Python中怎么修改文件中的某一行内容。(文件很大,不能读取全部内容)

Python015

Python中怎么修改文件中的某一行内容。(文件很大,不能读取全部内容),第1张

摘要:Python环境下文件的读取问题,请参见拙文Python基础——文件这是一道著名的Python面试题,考察的问题是,Python读取大文件和一般规模的文件时的区别,也即哪些接口不适合读取大文件。1.read()接口的问题f=open(filename,'rb')f.read()我们来读取1个nginx的日至文件,规模为3Gb大小。read()方法执行的操作,是一次性全部读入内存,显然会造成:MemoryError...也即会发生内存溢出。2.解决方案:转换接口(1)readl

Python 环境下文件的读取问题,请参见拙文 Python 基础 —— 文件

这是一道著名的 Python 面试题,考察的问题是,Python 读取大文件和一般规模的文件时的区别,也即哪些接口不适合读取大文件。

1. read() 接口的问题

f = open(filename, 'rb') f.read()

我们来读取 1 个 nginx 的日至文件,规模为 3Gb 大小。read() 方法执行的操作,是一次性全部读入内存,显然会造成:

MemoryError ...

也即会发生内存溢出。

2. 解决方案:转换接口3. 真正 Pythonic 的方法

真正 Pythonci 的方法,使用 with 结构:

with open(filename, 'rb') as f: for line in f: <do something with the line>

对可迭代对象 f,进行迭代遍历:for line in f,会自动地使用缓冲IO(buffered IO)以及内存管理,而不必担心任何大文件的问题。

There should be one – and preferably only one – obvious way to do it.

(1)readlines() :读取全部的行,构成一个 list,实践表明还是会造成内存的问题

for line in f.reanlines(): ...

(2)readline():每次读取一行,

while True: line = f.readline() if not line: break

(3)read(1024):重载,指定每次读取的长度

while True: block = f.read(1024) if not block: break

然后在循环里面替换就好了

for line in lines:         if "aaaa" in line:          #替换             line = line.replace("aaaaaa","bbbbbb")         f_w.write(line)

Python是一门编程语言,是一个较为方便地解决问题的工具。那么具体提升取决于你未来的岗位。

后台工程师/架构师

如果你的岗位是后台工程师,那么你要提升的是后台整体技术栈(mysql,redis,消息队列,多线程),系统设计和针对具体问题提出解决方案的能力。同时你要掌握工程的最佳实践,例如ci/cd等等。

数据工程师

如果你的岗位是数据工程师,那你需要把python数据处理的常见库做到精通,你需要了解各个领域的数据处理流程和特性,你需要掌握最近的技术进展

算法工程师

如果你是算法工程师,此时Python只是众多工具中的一个工具而已。如果你是科研方向,你要研究模型和理论本身,此时和语言没关系了。如果是应用向,即用算法解决具体的问题,那么你要提升的是对问题的理解和建模能力,需要提升的是对每一个模型或者算法的理解深度,在解决实际问题时,要能够用最合适的算法解决具体问题。

综上,Python只是一个具体的工具,本质上要提升的是学习和解决问题的能力。

希望对你有用。