日韩性视频-久久久蜜桃-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)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 最新日韩精品 | 欧美深性狂猛ⅹxxx深喉 | 草草视频在线播放 | 欧美一区二区三区久久综合 | 精品999视频 | 国产色网址 | 国模无码视频一区 | 水蜜桃av在线 | 人妻视频一区 | 日本不卡视频一区二区 | 久操视频网 | 亚洲高清欧美 | 深夜福利麻豆 | 91福利网站 | 国产一级做a爰片久久毛片男 | 波多一区二区 | www.97超碰 | 大奶骚 | 污视频在线免费 | 精品国产乱码久久久久久88av | 欧美激情免费在线观看 | 亚洲精品乱码久久久久久写真 | 自拍天堂 | 免费一级黄色片 | 影音先锋激情 | 成人毛片在线 | 中文字幕一区二区三区在线观看 | av不卡免费| 日韩av一区二区在线 | 成人动漫中文字幕 | 一区二区三区国产精品视频 | 久久99热这里只有精品 | 91亚洲欧美 | 国精产品一区一区三区免费视频 | 三上悠亚久久 | av网站免费在线看 | 欧美精品一区在线观看 | 国产成人福利 | 成年人激情视频 | 国产.com | 天天久久 | 免费人妻精品一区二区三区 | 杂技xxx裸体xxxx欧美 | 日本黄色小视频 | 波多野结衣视频免费看 | 久久久高潮 | 亚洲人屁股眼子交1 | 少妇天天干 | 久久国产片 | 精品一区二区三区免费视频 | 精产国产伦理一二三区 | 女女同性高清片免费看 | 日韩欧美久久 | 天天草天天草 | 1024视频在线 | 葵司ssni-879在线播放 | 特级丰满少妇一级aaaa爱毛片 | 做爰无遮挡三级 | 中字幕视频在线永久在线观看免费 | 午夜影院性 | 日本成人社区 | 久久99精品久久久久久 | 日韩少妇内射免费播放18禁裸乳 | 成av人在线| 国产做受视频 | 久久久久无码国产精品一区 | 日韩一区二区视频在线 | 西西人体大胆4444ww张筱雨 | 欧美精品手机在线 | 啪啪中文字幕 | 911色| 国产伦精品一区二区三区 | 日本加勒比一区 | 亚洲欧美另类一区 | 中文字幕乱码在线观看 | 日本高清黄色电影 | 一区二区三区免费在线观看视频 | 波多野结衣欲乱上班族 | 天堂av亚洲av国产av电影 | 欧产日产国产精品 | 午夜影院啊啊啊 | 日日爽视频 | _级黄色片| 99香蕉网| 蜜桃传媒一区二区亚洲av | 自拍偷拍亚洲视频 | 天天撸天天射 | 免费特级毛片 | 国产激情无码一区二区三区 | 国产一区二区三区在线观看免费 | 五月激情av | 九热这里只有精品 | 欧美一区网站 | 人妻少妇精品无码专区久久 | 国产精品久久777777 | 国产精品国产三级国产传播 | se婷婷| 97免费超碰 | 久久69|