導讀:本篇文章首席CTO筆記來給大家介紹有關python最多能輸出多少行記錄的相關內容,希望對大家有所幫助,壹起來看看吧。
用Python輸出9行內容,第壹行輸出1,第二行輸出12,第三行輸出123,以此類推,第九行輸出123456789, s?=?'' for?i?in?range(1,?10):s?+=?str(i)
print(s)
1
12
123
1234
12345
123456
1234567
12345678
123456789
是這樣嗎
powerbipython最多多少行
本次統計中純Python代碼量最大的Sentry幾乎達到了70W行,這是相當有規模的項目了。30W~50W行代碼的項目有三個,包括基礎項目CPython在內。20W和10W行代碼規模的分別有三個,剩下7個則在10W行以內。
看過這個列表妳應當相信,動態語言至少在幾十W行代碼的項目上是完全沒有問題的。這也是絕大多數普通應用的上限了,如果代碼真的達到數百萬行規模的話,那麽無論用什麽語言,都勢必面臨著拆分項目的問題。
上表將代碼量指標按照代碼/空白/註釋進行了分類,也在壹定程度上反應了項目的代碼風格。Sentry是本次統計中代碼量最多的項目,然而從表中可以看到,項目中的註釋和其他項目相比,少得有點不成比例,說明Sentry的作者非常不註重註釋。
同學們壹定發現了,我在列表中除了代碼行相關的指標之外還增加了幾個其他內容,這也是我個人比較感興趣的方面。
第壹個指標是每個文件的平均代碼行數。按照模塊化的觀點,單個文件中堆砌太多內容顯然是不合理的,這通常意味著耦合太多、難於理解和修改。然而到底多少算是合適,並沒有壹個明確的標準。我希望通過這些項目的分析,了解壹下開源作者們在實踐中做出的選擇。
統計的結果分布比較平均,從100~600行/文件的都存在,並不存在明顯的集中點。有趣的是,頭兩名(Pandas,NumPy)有著緊密的聯系,都是和數學統計相關的。這可能是因為數學庫的特點比較純粹而單壹,不像其他類庫那樣容易劃分。末尾的項目(Pillow,youtube-dl,Odoo,Scrapy)可以從側面印證這種猜想:它們都是面向特定領域的,所以更加容易模塊化。
第二個指標是註釋和代碼的比例,這個問題也有著類似的情況。註釋並非越詳盡越好,但總是需要壹定量的註釋來解釋Why的問題。註釋太少,說明項目的作者沒有給後來的維護人員留下足夠的線索,可能會造成維護上的問題。另壹方面,我們考察的全部是開源項目,沒有公司考核或者KPI的約束,所以我們可以放心的相信不會存在作者故意多寫註釋的問題。
前面提到的Sentry毫無爭議的因為註釋太少排到了最後,這未必說明這個項目很差,但至少是壹個信號,說明該項目在維護方面可能是存在問題的。而對於那些作者願意投入精力來寫註釋的項目(Ansible,NumPy,Fabric,Salt等),足以反映作者在項目上投入了相當大的心力,這是壹個好的信號,說明這些項目是值得信賴的。
有壹點是出乎我意料的,那就是作為所有項目之母的CPython排名比較靠後,按照道理這個基礎項目應該有更多的註釋才對。不過再想壹想又覺得可以理解,因為CPython有單獨發布的、非常詳盡的文檔,這是其他大多數項目都沒有的,那麽代碼中的註釋少壹些也是情有可原的。
最後壹項統計是關於文件類型的。Python項目中絕大多數應該是Python代碼,這點沒有什麽疑問,但同時我也想看看除了Python代碼之外,壹個項目還包括哪些主要文件。C/HTML/Javascipt的上榜是毫不意外的,但有壹種文件我事先沒有想到,那就是.PO(開源項目常用的語言資源文件)。
對於Django和Django-CMS這兩個項目,PO代碼數量甚至比Python代碼還要多。大概看了壹下,Django支持90種以上的語言,這也無怪乎語言文件的數量如此之多了。
這個結果也可以提醒我們,有些同學——不僅是程序員,也包括大多數經驗不足的老板、客戶、產品經理等——會下意識的認為程序開發無非是寫代碼,對於代碼之外的其他工作,在估算的時候往往只拍腦袋式的定下壹個極短的時間。但對於實際的項目來說,代碼僅僅是其中的壹部分,“其他工作”有時候——應該說是經常——會占用妳大部分的的時間和精力。這些工作往往並不有趣,但對於項目來說又是必不可少的組成部分,希望同學們予以足夠的重視。
python讀取文件內最多多少行字符1048576行。python讀取文件內最多1048576行字符。Python由荷蘭數學和計算機科學研究學會的吉多·範羅蘇姆於1990年代初設計,作為壹門叫做ABC語言的替代品。Python提供了高效的高級數據結構,還能簡單有效地面向對象編程。Python語法和動態類型,以及解釋型語言的本質,使它成為平臺上寫腳本和快速開發應用的編程語言。
pythonopenpyxl寫xlsx最多寫多少行不超過100行
最近要幫做RA的老姐寫個合並excel工作表的腳本……源數據是4000+個excel工作表,分布在9個xlsm文件裏,文件內容是中英文混雜的壹些數據,需要從每張表中提取需要的部分,分門別類合並到多個大的表裏。
尋覓工具
確定任務之後第壹步就是找個趁手的庫來幹活。?PythonExcel上列出了xlrd、xlwt、xlutils這幾個包,但是
它們都比較老,xlwt甚至不支持07版以後的excel
它們的文檔不太友好,都可能需要去讀源代碼,而老姐的任務比較緊,加上我當時在期末,沒有這個時間細讀源代碼
再壹番搜索後我找到了openpyxl,支持07+的excel,壹直有人在維護,文檔清晰易讀,參照Tutorial和API文檔很快就能上手,就是它了~
安裝
這個很容易,直接pipinstallopenpyxl,呵呵呵~
因為我不需要處理圖片,就沒有裝pillow。
壹些考慮
源文件大約壹個在1~2MB左右,比較小,所以可以直接讀入內存處理。
既然是處理excel,何況他們整個組顯然都是win下幹活(數據都用excel存了==,商科的人啊……),這個腳本還是在win下做吧
這個任務完全不需要我對現有的文件做修改!囧……我只要讀入、處理、再寫出另壹個文件就行了
學習使用
嗯,就是打開cmd,然後用python的shell各種玩這個模塊來上手……(win下沒有裝ipython,囧)
做這個小腳本基本上我只需要import兩個東西
fromopenpyxlimportWorkbookfromopenpyxlimportload_workbook
load_workbook顧名思義是把文件導入到內存,Workbook是最基本的壹個類,用來在內存裏創建文件最後寫進磁盤的。
幹活
首先我需要導入這個文件
inwb=load_workbook(filename)
得到的就是壹個workbook對象
然後我需要創建壹個新的文件
outwb=Workbook()
接著在這個新文件裏,用create_sheet新建幾個工作表,比如
careerSheet=outwb.create_sheet(0,'career')
就會從頭部插入壹個叫career的工作表(也就是說用法類似pythonlist的insert)
接下來我需要遍歷輸入文件的每個工作表,並且按照表名做壹些工作(e.g.如果表名不是數字,我不需要處理),openpyxl支持用字典壹樣的方式通過表名獲取工作表,獲取壹個工作簿的表名的方法是get_sheet_names
forsheetNameininwb.get_sheet_names():ifnotsheetName.isdigit():continue
sheet=inwb[sheetName]
得到工作表之後,就是按列和行處理了。openpyxl會根據工作表裏實際有數據的區域來確定行數和列數,獲取行和列的方法是sheet.rows和sheet.columns,它們都可以像list壹樣用。比如,如果我想跳過數據少於2列的表,可以寫
iflen(sheet.columns)2:continue
如果我想獲取這個工作表的前兩列,可以寫
colA,colB=sheet.columns[:2]
除了用columns和rows來得到這個工作表的行列之外,還可以用excel的單元格編碼來獲取壹個區域,比如
cells=sheet['A1':'B20']
有點像excel自己的函數,可以拉出壹塊二維的區域~
為了方便處理,遇到壹個沒有C列的工作表,我要創建壹個和A列等長的空的C列出來,那麽我可以用sheet.cell這個方法,通過傳入單元格編號和添加空值來創建新列。
alen=len(colA)foriinrange(1,alen+1):
sheet.cell('C%s'%(i)).value=None
註意:excel的單元格命名是從1開始的~
上面的代碼也顯示出來了,獲取單元格的值是用cell.value(可以是左值也可以是右值),它的類型可以是字符串、浮點數、整數、或者時間(datetime.datetime),excel文件裏也會生成對應類型的數據。
得到每個單元格的值之後,就可以進行操作了~openpyxl會自動將字符串用unicode編碼,所以字符串都是unicode類型的。
除了逐個逐個單元格用cell.value修改值以外,還可以壹行行append到工作表裏
sheet.append(strA,dateB,numC)
最後,等新的文件寫好,直接用workbook.save保存就行
outwb.save("test.xlsx")
這個會覆蓋當前已有的文件,甚至妳之前讀取到內存的那個文件。
壹些要註意的地方
如果要在遍歷壹列的每個單元格的時候獲取當前單元格的在這個column對象裏的下標
foridx,cellinenumerate(colA):#dosomething...
為了防止獲取的數據兩端有看不見的空格(excel文件裏很常見的坑),記得strip()
如果工作表裏的單元格沒有數據,openpyxl會讓它的值為None,所以如果要基於單元格的值做處理,不能預先假定它的類型,最好用
ifnotcell.valuecontinue
之類的語句來先行判斷
如果要處理的excel文件裏有很多noise,比如當妳預期壹個單元格是時間的時候,有些表的數據可能是字符串,這時候可以用
ifisinstance(cell.value,unicode):break
之類的語句處理。
win下的cmd似乎不太好設定用utf-8的codepage,如果是簡體中文的話可以用936(GBK),print的時候會自動從unicode轉換到GBK輸出到終端。
壹些幫忙處理中文問題的小函數
我處理的表有壹些超出GBK範圍的字符,當我需要把壹些信息print出來監控處理進度的時候非常麻煩,好在它們都是可以無視的,我直接用空格替換再print也行,所以加上壹些我本來就要替換掉的分隔符,我可以:
#annoyingseperatorsdot=u'\u00b7'dash=u'\u2014'emph=u'\u2022'dot2=u'\u2027'seps=(u'.',dot,dash,emph,dot2)defget_clean_ch_string(chstring):"""RemoveannoyingseperatorsfromtheChinesestring.
Usage:
cleanstring=get_clean_ch_string(chstring)"""
cleanstring=chstringforsepinseps:
cleanstring=cleanstring.replace(sep,u'')returncleanstring
此外我還有壹個需求,是把英文名[空格]中文名分成英文姓、英文名、中文姓、中文名。
首先我需要能把英文和中文分割開,我的辦法是用正則匹配,按照常見中英文字符在unicode的範圍來套。匹配英文和中文的正則pattern如下:
#regexpatternmatchingallasciicharactersasciiPattern=ur'[%s]+'%''.join(chr(i)foriinrange(32,127))#regexpatternmatchingallcommonChinesecharactersandseporatorschinesePattern=ur'[\u4e00-\u9fff.%s]+'%(''.join(seps))
英文就用ASCII可打印字符的範圍替代,常見中文字符的範圍是\u4e00-\u9fff,那個seps是前面提到過的超出GBK範圍的壹些字符。除了簡單的分割,我還需要處理只有中文名沒有英文名、只有英文名沒有中文名等情況,判斷邏輯如下:
defsplit_name(name):"""Split[Englishname,Chinesename].
Ifoneofthemismissing,Nonewillbereturnedinstead.
Usage:
engName,chName=split_name(name)"""
matches=re.match('(%s)(%s)'%(asciiPattern,chinesePattern),name)ifmatches:?#Englishname+Chinesename
returnmatches.group(1).strip(),matches.group(2).strip()else:
matches=re.findall('(%s)'%(chinesePattern),name)
matches=''.join(matches).strip()ifmatches:?#Chinesenameonly
returnNone,matcheselse:?#Englishnameonly
matches=re.findall('(%s)'%(asciiPattern),name)return''.join(matches).strip(),None
得到了中文名之後,我需要分割成姓和名,因為任務要求不需要把姓名分割得很明確,我就按照常見的中文名姓名分割方式來分——兩個字or三個字的第壹個字是姓,四個字的前兩個字是姓,名字帶分隔符的(少數民族名字)分隔符前是姓(這裏用到了前面的get_clean_ch_string函數來移除分隔符),名字再長壹些又不帶分割符的,假設整個字符串都是名字。(註意英語的firstname指的是名,lastname指的是姓,2333)
defsplit_ch_name(chName):"""SplittheChinesenameintofirstnameandlastname.
*IfthenameisXYorXYZ,Xwillbereturnedasthelastname.
*IfthenameisWXYZ,WXwillbereturnedasthelastname.
*Ifthenameis...WXYZ,thewholenamewillbereturned
asthelastname.*Ifthenameis..ABC*XYZ...,thepartbeforetheseperator
willbereturnedasthelastname.Usage:
chFirstName,chLastName=split_ch_name(chName)"""
iflen(chName)4:?#XYorXYZ
chLastName=chName[0]
chFirstName=chName[1:]eliflen(chName)==4:?#WXYZ
chLastName=chName[:2]
chFirstName=chName[2:]else:?#longer
cleanName=get_clean_ch_string(chName)
nameParts=cleanName.split()printu''.join(nameParts)iflen(nameParts)2:?#...WXYZ
returnNone,nameParts[0]
chLastName,chFirstName=nameParts[:2]?#..ABC*XYZ...
returnchFirstName,chLastName
分割英文名就很簡單了,空格分開,第壹部分是名,第二部分是姓,其他情況暫時不管就行。
python裏怎麽輸入n行,並且輸出n行?3行分別用3個input()接收。
另外妳的n有實際作用嗎,是第2行長度不符合n的要求退出嗎
結語:以上就是首席CTO筆記為大家整理的關於python最多能輸出多少行記錄的全部內容了,感謝您花時間閱讀本站內容,希望對您有所幫助,更多關於python最多能輸出多少行記錄的相關內容別忘了在本站進行查找喔。