⑴ python 一个文件太大+内存装不下+怎么读取 mongo
Python 环境下文件的读取问题,请参见拙文Python 基础 —— 文件
这是一道着名的 Python 面试题,考察的问题是,Python 读取大文件和一般规模的文件时的区别,也即哪些接口不适合读取大文件。
1. read() 接口的问题
f = open(filename, 'rb')
f.read()12
我们来读取 1 个 nginx 的日至文件,规模为 3Gb 大小。read() 方法执行的操作,是一次性全部读入内存,显然会造成:
MemoryError...12
也即会发生内存溢出。
2. 解决方案:转换接口
(1)readlines() :读取全部的行,构成一个 list,实践表明还是会造成内存的问题;
for line in f.reanlines(): ...1
2
(2)readline():每次读取一行,
while True:1
2
3
4
(3)read(1024):重载,指定每次读取的长度
while True: block = f.read(1024) if not block: break1
2
3
4
3. 真正 Pythonic 的方法
真正 Pythonci 的方法,使用 with 结构:
对可迭代对象 f,进行迭代遍历:for line in f,会自动地使用缓冲IO(buffered IO)以及内存管理,而不必担心任何大文件的问题。
There should be one – and preferably only one – obvious way to do it.
⑵ 学python最想要提升的是哪些地方
Python是一门编程语言,是一个较为方便地解决问题的工具。那么具体提升取决于你未来的岗位。
如果你的岗位是后台工程师,那么你要提升的是后台整体技术栈(mysql,redis,消息队列,多线程),系统设计和针对具体问题提出解决方案的能力。同时你要掌握工程的最佳实践,例如ci/cd等等。
如果你的岗位是数据工程师,那你需要把python数据处理的常见库做到精通,你需要了解各个领域的数据处理流程和特性,你需要掌握最近的技术进展
如果你是算法工程师,此时Python只是众多工具中的一个工具而已。如果你是科研方向,你要研究模型和理论本身,此时和语言没关系了。如果是应用向,即用算法解决具体的问题,那么你要提升的是对问题的理解和建模能力,需要提升的是对每一个模型或者算法的理解深度,在解决实际问题时,要能够用最合适的算法解决具体问题。
综上,Python只是一个具体的工具,本质上要提升的是学习和解决问题的能力。
希望对你有用。
⑶ php中,哪个框架比较好用是CI,TP,Zend,还是YII
所有框架中最神奇的、开发最迅速的是ruby on rails,号称比别的框架快4倍,所言非虚,因为rails有自动代码生成器功能,创建一个模型,自动给你搭好CURD操作。后来的很多框架,包括django(python),lavarel(php),cakephp(php)都是模仿rails,但都不如rails,主要原因在于ruby语言本身的简洁与优美,读rails的代码感觉特别舒服,特别精练,一点不绕(很少有php框架中常见的大段检测、对比、if判断代码),而其它语言的框架都达不到这点
目前最活跃的框架是thinkphp、CI、YII社区也还可以,其余的社区人气很差,没法考虑,尤其是rails,在中国人气非常之低,配置与启动需用命令行,win系统不能很好兼容,问题都找不到答案,最终不得不舍弃。
从人气与文档详细上,最终胜出的是tp,ci,YII,ZEND至今连个中文手册都没有,直接pass,不管它号称多么强大,连个中文社区与文档都没有,出了问题还要翻墙看英文,太痛苦了
在TP、YII、CI三者的角逐中,YII同样有命令行(有命令行的一律减分),有自动生成器功能,但是有个巨大缺点:生成出很多不用的空文件夹,导致文件结构非常混乱,控制器文件、模型文件夹四处都有,不知道哪个跟哪个,而且YII的函数比较碎片化,语法不够清晰也不好懂,最终PASS
TP是国产的,如果CI给80分,TP也可以给75分,两者很接近,tp社区人气很活跃,有什么问题网络一搜就出来了,开源代码也非常多,类库集成度跟CI不相上下,差就差在文件结构上稍逊CI一些,语法易懂性也比CI稍差