2015-02-10 58 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