⑴ 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稍差