2010-03-11 105 views
2
line = "english: while french: pendant que spanish: mientras german: whrend " 

words = line.split('\t') 

for each in words: 
each = each.rstrip() 

print words 

在“行”的字符串是制表符分隔,但还具有各自的译词后一个空格字符,因此而分裂返回列表我之后,每个字烦人有一个空白字符在字符串的末尾。操纵列表项蟒蛇

在循环,我试图去通过列表,并删除在字符串末尾的任何空格,但所行似乎工作

,建议?

回答

2

只是line.split()可以给你剥词表。

更新each环内不会使该words列表

任何改变应该像这样

for i in range(len(words)): 
    words[i]=words[i].rstrip() 

或者

words=map(str.rstrip,words) 

See the map docs来完成对地图的详细信息。

或用列表解析与正则表达式

words=[x.rstrip() for x in line.split("\t")] 

或者一个衬垫.findall

words=re.findall("[^\t]+",line) 
+0

数据IM解析,将例如在范围法语单词“挂件阙”分成两个词 – dave 2010-03-11 10:46:43

+0

好吧,那么你可以用我的第二个例子'尝试我(LEN(字)):...'或'words = map(str.rstrip,words)' – YOU 2010-03-11 10:48:31

+0

啊,那是有用的谢谢。我看到python分享了像haskell这样的语言的一些好处。在这个例子中,map函数是str.strip一个常量吗?感觉奇怪,没有一套括号​​...... – dave 2010-03-11 11:07:19

1
words = line.split('\t') 
words = [ i.rstrip() for i in words ] 
+0

多数民众赞成好。我不知道蟒蛇做了列表理解 – dave 2010-03-11 10:57:39

+0

或者你甚至可以结合这为一个班轮 – SilentGhost 2010-03-11 10:58:09

0

您可以使用正则表达式:

import re 
words = re.split(r' *\t| +$', line)[:-1] 

有了这个定义可能的序列作为分隔符。由于*运算符(或根本没有空间),它也允许多个空间。

编辑:修正后的罗杰·佩特指出错误。

+1

你仍然需要在此之后,除去最后空间(字符串中的最后一个字符)。 – 2010-03-11 11:17:16

+0

你说得对。我会修好它。 – 2010-03-11 12:35:29