日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

第一个python去掉行号

發(fā)布時間:2025/4/5 python 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第一个python去掉行号 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
http://blog.sciencenet.cn/home.php?mod=space&uid=404069&do=blog&id=297132 (根據(jù)我在博客園上連載的四篇文章整理,見http://yanxy.cnblogs.com/,轉(zhuǎn)載請注明出處)

?????? 近兩天內(nèi)的目標是在我博的每個欄目發(fā)一篇文章,先都占個坑再說,空著不好看:) 《程序設(shè)計》這個欄目里,就從我剛開始學的Python開始吧。
? 一、引言 Python是一種簡單卻又強大的語言,我覺得它很適合非專業(yè)程序員(特別是科研人員)使用。比如作一些科學計算、數(shù)據(jù)處理工作等,Python簡單的語法和豐富的第三方庫可以有效幫助我們提高工作效率。 本文并不主要介紹Python編程的語法,或Python怎么安裝、運行、調(diào)試等,有興趣可以到科學網(wǎng)潘超的Blog去看看,那里有一些不錯的入門資源。整理這篇文章的主要目的還是想介紹下我學、用Python的一些體會,希望能為大家提供借鑒。我學Python已經(jīng)有十多天了,現(xiàn)在已經(jīng)初步掌握了Python。我認為好的學習方法不光是看書或上網(wǎng)查資料,最好是能結(jié)合一個實際的例子一點點去深入,這樣掌握起來會更快更牢。我在寫了“Hello World”之后,第一個正式編的程序就是下面這個復(fù)制代碼時去除行號的小工具。

二、分析與設(shè)計
現(xiàn)在很多專業(yè)計算機技術(shù)網(wǎng)站提供的各種源代碼前,很多會帶有數(shù)字行號。我們將這些代碼復(fù)制下來運行前,要一行一行的去刪除前面的代碼,即浪費時間又容易出錯。如果有一個程序能快速、正確的去除掉代碼前的行號,無疑可以節(jié)省我們的很多時間(當然我寫這個程序花了大概有10幾個小時,不過正所謂“磨刀不誤砍柴工”嘛:)。 網(wǎng)上代碼前的行號排列大都比較有規(guī)律,多數(shù)采取如下形式: 1. abc 2. def ……………… 或 1 abc 2 def ……………… 以及[1]、1:、(1)等。 因此,要去除行號,首先就是要查找到每行的開頭數(shù)字及前后分割符號,然后替換掉他們。根據(jù)這個思路,很容易寫出如下的基本程序框架: 第1步:讀取全部n行代碼到一個字符串,然后將其轉(zhuǎn)換為包含n個子字符串的數(shù)組(或列表); 第2步:對于每一個子字符串,從左至右開始查找每個字符,如果找到一個或多個連續(xù)的、可轉(zhuǎn)換為整數(shù)的字符,就刪除其左側(cè)(包含數(shù)字自身位置)的全部字符,并用剩余部分生成一個新字符串。 第3步:如果新字符串左側(cè)有空白或:.])等分割符號,就去除掉它們,再用剩余部分生成一個新字符串。 第4步:將所有處理過的字符串順序連接起來,得到一個字符串,返回處理行號后的源代碼。

三、初步的實現(xiàn)——字符串替換
由于Python語言提供了良好的字符串操作功能,因此很快可以寫出一個初步的版本: #代碼1

# -*- coding: utf-8 -*-

def CutLineNum(inStr): #用def關(guān)鍵字聲明函數(shù),注意后邊加冒號
??? multiStr = inStr.splitlines(1)
#將多行文本拆分為文本列表
??? outStr = u
''
???
for singleStr in multiStr: #循環(huán)用for in的結(jié)構(gòu),后邊也加冒號
??????? singleStr = singleStr.lstrip()
#去除左側(cè)空白
??????? i=0?
#迭代算子
???????
for charStr in singleStr: #從左至右循環(huán)查找字符
???????????
if charStr.isdigit():#如果判斷是數(shù)字類型
??????????????? i += 1
#迭代算子加1
??????? ????
elif i>0: #找到了一個非數(shù)字字符,而且前邊已有數(shù)字字符
??????????????? singleStr = singleStr[i:]
#返回從該位置起的剩余字符
???????????????
break #跳出循環(huán)
???????????
else: #如果都沒有,說明是空行
???????????????
break #跳出循環(huán)
??????? outStr += singleStr
#將所有行組成完整代碼
???
return outStr #返回 (注意,# -*- coding: utf-8 -*-是使用utf-8編碼,可以支持中文字符) 以上代碼實現(xiàn)了基本程序框架中的1-3步,第4步由于情況較復(fù)雜(有的行號后有分割符,有的沒有,而且空格數(shù)量也不一樣),所以暫時用以下函數(shù)手工處理: #代碼2

# -*- coding: utf-8 -*-

def CutLeftChar(inStr):
??? outStr = u
''
??? multiStr = inStr.splitlines(1)
???
for singleStr in multiStr:
??????? singleStr = singleStr[1:]
??????? outStr += singleStr
???
return outStr 這樣雖然苯拙一點,但至少解決了問題。 四、進一步優(yōu)化——正則表達式替換

正則表達式(Regular Expression,簡稱Regex),是指一個用來描述或者匹配一系列符合某個句法規(guī)則的字符串的單個字符串。關(guān)于Python中正則的入門材料可以參考《正則表達式30分鐘入門教程》,?(不過我覺得30分鐘掌握正則表達式還是有困難的,為掌握它我還專門買了一本《精通正則表達式》)。正則表達式是一種處理文本的強大工具,刪除代碼行號對于它來講是小菜一疊。下面用正則表達式改寫代碼1和2,如下:

#代碼3import re #導(dǎo)入Python的正則表達式模塊def CutLineNum (inStr):??? multiStr = inStr.splitlines(1)
??? outStr = u
''p = re.compile(r'\D*\d+\s?[.|:|\]|\)]?\s?') #編譯正則表達式
???
for singleLine in multiLine:
??????? outStr += p.sub(
'', singleLine,count = 1 ) #用空字符替換每行的第一個匹配上述正則表達式的字符串
???
return outStr #返回累加后的字符串? 以上代碼中的咖色部分就是一個Regex,它的含義是:0或多個非數(shù)字字符 + 至少1個數(shù)字字符 + 0或1個空白字符 + 0或1個分隔符(包括點、冒號、右圓/方括號,可添加其他分隔符) + 0或1個空白字符。 以上Regex符合大多數(shù)代碼前行號的規(guī)則,刪除行號就是用空字符替換掉每行代碼中第一個匹配該Regex的字符串(注意只能是第一個,因為程序里可能會存在abc1.open等情況,如果全部匹配就會誤刪代碼)。 五、繼續(xù)優(yōu)化——采用函數(shù)編程 代碼3看起來還不夠簡潔,沒關(guān)系,Python是一種“準”函數(shù)編程(Functional Programming,FP)語言,做這種簡化代碼的事情最拿手。在這里,我用到了兩種函數(shù)編程手段——匿名函數(shù)(lambda)和一種高階函數(shù)(map),將代碼簡化至一行,如下: #代碼4import re #導(dǎo)入Python的正則表達式模塊outStr = ''.join(map(lambda x:re.compile(r'\D*\d+\s?[.|:|\]|\)]?\s?').sub( '', x,count = 1 ),inStr.splitlines(1)))) 這樣代碼就只優(yōu)化到了一行了,是不是很簡潔呢?當然代碼的可讀性受到一定影響。所以函數(shù)編程不能濫用。(濫用的例子可以見我的文章《學習Python列表內(nèi)涵:一行代碼搞定雙倍超立方數(shù)計算》)。函數(shù)編程是個稍微復(fù)雜點的問題,我覺得掌握與否均可,所以就不很詳細地去解釋上述代碼了。如果對Python的函數(shù)編程感興趣,可以參考《可愛的 Python:Python 中的函數(shù)編程》,很不錯的一篇文章。 六、完整的程序——添加I/O 完整的程序肯定少不了輸入輸出功能。對于這個去除復(fù)制代碼行號的小工具,我想到的輸入輸出方式一共有三種: 1、文件方式 將復(fù)制的代碼存為一個文本文件,然后用程序讀取它,去掉行號后在寫回文件。這種方法應(yīng)該說是最不方便的,可以算一下自己需要點多少下鼠標……麻煩,所以我沒有實現(xiàn)它。關(guān)于Python的文件操作內(nèi)容,網(wǎng)上有很多資料,可以搜索一下。 2、窗口方式 將復(fù)制的代碼粘貼到一個窗體的文本框里,然后點擊按鈕去除行號,再從文本框里把處理后的代碼復(fù)制出來。這是比較常規(guī)的做法,我分別用wxPython和PyQt4實現(xiàn)了這項功能,源代碼見http://www.cnblogs.com/。由于GUI編程是個比較復(fù)雜的問題,我就不詳細展開了,以后有時間再寫。 3、剪貼板方式 復(fù)制代碼到剪貼板后,啟動處理行號程序,直接處理剪貼板內(nèi)的文本,然后再復(fù)制到其他地方。這是最方便的一種方法,而且由于不用構(gòu)建GUI,代碼量也會很少。見下邊:

#
代碼5
# -*- coding: utf-8 -*-
import win32clipboard as c #import包的時候,如果包名太長,可以用as起一個別名
import win32con as w #以上兩個包都是專門針對windows平臺的,注意
import re

c.OpenClipboard()
#打開剪貼板
strList = c.GetClipboardData(w.CF_TEXT).splitlines(1) #讀取剪貼板內(nèi)容到一個字符列表
c.EmptyClipboard() #清空剪貼板
c.SetClipboardData(w.CF_TEXT, ''.join(map(lambda x:re.compile \
??? (r
'\D*\d+\s?[.|:|\]|\)]?\s?').sub( '', x,count = 1 ),strList )))
????
#將去處行號后的字符寫回剪貼板,此處用到代碼3
c.CloseClipboard() #關(guān)閉剪貼板 七、總結(jié) 以上就是我初學Python作的第一個程序,雖然很簡單,但在編寫這個程序的過程中,我學習到了: 1、Python的基本語法、類型與邏輯控制 2、Python的函數(shù)定以及函數(shù)編程方法 3、Python的圖形用戶界面設(shè)計(GUI) 4、正則表達式及其在Python中的應(yīng)用 短時間內(nèi)就可以學會這么多內(nèi)容,足以說明Python的簡單易學,你也應(yīng)該能體會到Python的強大吧。此外,在完成這個程序的過程中,我所用到的基本思路是: 1、由粗到細 先根據(jù)功能要求實現(xiàn)程序邏輯框架,然后用你所掌握的最基本方法實現(xiàn)初步版本,先讓程序能用。在此基礎(chǔ)上,再去看是否有繼續(xù)優(yōu)化的可能(從代碼簡潔性或效率兩方面),逐步細化,這時候才是提高的過程。 2、自內(nèi)而外 先實現(xiàn)核心算法,再添加外圍功能(I/O,GUI等)。有些編程初學者熱衷于用IDE去拖拉控件、美化界面等(當然這項工作也是必要的),沒有把更多精力集中到核心算法中去,這樣不利于真正學好一門語言。 當然這個程序還有很多需要完善的地方,歡迎提出你的意見或建議。

如果需要了解更多關(guān)于Python的內(nèi)容,可訪問啄木鳥社區(qū)的《Python?資源索引》。



本文引用地址:http://blog.sciencenet.cn/home.php?mod=space&uid=404069&do=blog&id=297132?

轉(zhuǎn)載于:https://www.cnblogs.com/swjm119/archive/2012/01/18/2325280.html

總結(jié)

以上是生活随笔為你收集整理的第一个python去掉行号的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 中文字幕网伦射乱中文 | 亚洲视频播放 | 国产精品一区二区在线观看 | 日本久久精品 | 日韩国产传媒 | 免费黄色网址在线观看 | 黄a免费网络 | 亚洲欧洲视频在线观看 | 中国女人做爰视频 | 欧美碰碰碰 | 脱美女衣服亲摸揉视频 | 欧美成性色 | 国产成年人视频网站 | 国产日韩成人 | 性色av一区二区三区红粉影视 | 日韩激情毛片 | 天狂传说之巴啦啦小魔仙 | 在线看成人 | 免费无码又爽又黄又刺激网站 | 久一久久| 天天干天天干 | 一级看片免费视频 | 免费看欧美成人a片无码 | 精品一区二区久久久久蜜桃 | 丰满人妻一区二区三区性色 | 免费视频www在线观看网站 | 亚欧美一区二区三区 | 美女视频黄频视频大全 | 尤物视频一区 | 超碰伦理 | 亚洲大片在线观看 | 亚洲制服一区二区 | 欧美精品二区三区四区免费看视频 | 五月婷婷丁香花 | 激情国产精品 | 亚洲福利视频导航 | 国产精品成人国产乱一区 | 欧美50p | 四虎www | 国产欧美一区二区精品性色 | 成人在线免费网站 | 无码一区二区三区在线 | 中文字幕人妻一区二区在线视频 | 丝袜视频在线 | 免费精品 | 亚洲成人一级 | 久操视频精品 | 国产欧美熟妇另类久久久 | 日韩小视频 | 日韩久久电影 | 骚视频在线观看 | 美女隐私无遮挡免费 | 青青青在线视频免费观看 | 西西人体做爰大胆gogo直播 | 亚州男人的天堂 | 动漫av一区 | 伊人网综合 | 国产成人一区二区三区 | 午夜免费播放观看在线视频 | 乌克兰毛片 | 午夜丁香婷婷 | www.久久久 | 日韩三级理论 | 电影一区二区三区 | 色哟哟一区二区三区四区 | 一区二区三区观看 | 日日骚网 | 精品午夜一区二区三区在线观看 | 六月综合| av三级| 在线免费视频 | 亚洲美女av在线 | 欧美日韩在线观看一区二区三区 | 夜夜操网址| 久久精品9| 精品在线视频一区 | 男人的天堂av女优 | 免费二区 | 又黄又爽又色视频 | 五月天视频 | 99久国产 | 在线观看精品 | 两女双腿交缠激烈磨豆腐 | 99在线精品免费视频 | 一区二区三区欧美 | 第五色婷婷 | 天天摸日日干 | 欧美经典一区二区三区 | 精品久久久久久久久久久aⅴ | 亚洲国产精品无码观看久久 | 青青青视频免费 | 欧洲精品一区二区三区久久 | www日本在线观看 | 国产最新视频 | 男人添女人下部高潮全视频 | 久综合| 欧美久久伊人 | av在线亚洲天堂 | 国产午夜精品久久 |