2015-02-10 57 views
1

我想嘗試Python,我來自Perl。我的第一個例子是一個程序:使用python操作文件

  1. 閱讀傳遞給程序文件
  2. 搜索開始以元音總之就是至少4個字符長,其直接跟隨
  3. 交換這個詞
  4. 逆所有文件中的行(最後一行成爲第一個)
  5. 在大寫把一切
  6. 顯示它在stdout

用Perl我可以這樣寫:

print reverse map uc s/\b(\w+[aeiouy]\w{3,})\s+(\w+)\b/$2 $1/gr, <>;  

在Python我寫了這個:

import fileinput 
import re 
alist = [] 
for line in fileinput.input(): 
    alist.append(re.sub(r"\b(\w+[aeiouy]\w{3,})\s+(\w+)\b", r"\2 \1", line.upper())) 
print "".join(alist[::-1]) 

它,它寫的正確方法?爲什麼正則表達式在這裏不起作用?


這裏輸入文件的例子:

Suscipit elementum. Nulla accumsan at ex sed viverra. 
molestie. In volutpat aliquam massa, vitae arcu ultricies blandit tempus. Donec nisi semper non 
commodo nec purus fringilla fringilla. Suspendisse potenti. Vestibulum feugiat a lectus imperdiet 
Class aptent taciti sociosqu ad litora per torquent conubia nostra, per inceptos himenaeos. Cras 

Phasellus ac condimentum mauris. Sed aliquet leo sagittis nec varius. 

和預期輸出:

AC PHASELLUS MAURIS CONDIMENTUM. SED LEO ALIQUET NEC SAGITTIS VARIUS. 

CLASS APTENT SOCIOSQU TACITI AD PER LITORA CONUBIA TORQUENT NOSTRA, PER HIMENAEOS INCEPTOS. CRAS 
NEC COMMODO FRINGILLA PURUS FRINGILLA. POTENTI SUSPENDISSE. FEUGIAT VESTIBULUM A IMPERDIET LECTUS 
MOLESTIE. IN ALIQUAM VOLUTPAT MASSA, ARCU VITAE BLANDIT ULTRICIES TEMPUS. NISI DONEC NON SEMPER 
ELEMENTUM SUSCIPIT. ACCUMSAN NULLA AT EX SED VIVERRA. 
+0

什麼是ALIST的輸出,你可以給你想要匹配作爲一個例子一些線? – Jaay 2015-02-10 09:24:12

+0

考慮使用Pythex來測試你的輸入的正則表達式:http://pythex.org – 2015-02-10 09:25:18

+0

如果你的正則表達式正在工作(通過測試),那麼考慮把你的Python代碼分解成更小的部分來測試它的工作方式。 – 2015-02-10 09:26:16

回答

1
alist.append(re.sub(r"\b(\w+[aeiouy]\w{3,})\s+(\w+)\b", r"\2 \1", line.upper(),flags=re.I)) 

您必須添加igonorecase flag.As你讓你的行uppercapitals,在你的正則表達式中,你不會說明這一點。 [aeiouy]只會匹配小寫字母vowels不能大寫。

而且不是print使用sys.stdout.write作爲print將增加一個額外的newline。所以你的文件將有每行之後an empty line

或者使用

print something.rstrip()

+1

或只是'打印的東西,'這將抑制任何額外的EOL – 2015-02-10 09:50:08

+0

@JonClements dat涼爽............不知道它... .have你測試過了嗎?dat如何刪除'print'添加的換行符。測試過它..它工作正常.Thanx.dat對我來說是新的 – vks 2015-02-10 09:50:59

+2

呃...它只是Python 2.x語法的一部分...一個'print'語句中的尾隨逗號可以防止輸出換行符......(誠然,這不是世界上最自然的語法,但是哦) – 2015-02-10 09:57:06