2013-06-18 38 views
0

我有像字的文件:文件列表中,然后分裂列表中的每个学期,蟒蛇

IA45,TA43,WB58,AB71 ... etc 

,我想这句话转换成一个列表,如:

["IA45","TA43","WB58","AB71" .....] 

然后,我想用这个列表逐个单词,并将第一个字母,第二个字母和数字作为分隔变量进行分割。 我:

with open("IRL.txt", "r") as f: 
    resid_list = [x.split(',') for x in f.readlines()] 
    for r in resid_list: 
     chain = list(r)[1] 
     print chain 
     res = list(r)[0] 
     print res 
     num = list(r)[2:] 
     num1 = "".join(num) 
     res_num = res+num1 
     print res_num+" "+chain 

的问题是在for循环。当我打印“链”,它只是给了我第二个字,没有别的---> TA43

但我想打印一个---

回答

1

变化for r in resid_listfor r in resid_list[0]

既然你使用列表理解,你的参数看起来是这样的:

In [9]: resid_list 
Out[9]: [['IA45', 'TA43', 'WB58', 'AB71']] 

即列表的列表

In [10]: resid_list[0] 
Out[10]: ['IA45', 'TA43', 'WB58', 'AB71'] 

给你你想要的。

+0

感谢您的回答! –

2

我想你想要像下面这样:

with open("IRL.txt", "r") as f: 
    resid_list = [x for line in f.readlines() for x in line.split(',')] 
    for r in resid_list: 
     first = r[0] 
     second = r[1] 
     num = r[2:] 
     # do something with those variables 

在当前版本resid_list是列表的列表,但我想你想的字符串的平面列表。

+0

感谢您的回答!这是一个非常简单的解决方案。真的感谢。 –

1

能使用re.findall并采取第一场比赛与发电机表达

import re 

line = 'IA45,TA43,WB58,AB71' 
for fst, snd, nums in (re.findall('(.)(.)(\d+)', el)[0] for el in line.split(',')): 
    print fst, snd, nums 

I A 45 
T A 43 
W B 58 
A B 71 

根据您的线路/如何格式化预见的是,你甚至可以用只是为了脱身:

for fst, snd, nums in re.findall('(.)(.)(\d+)', line): 
    print fst, snd, nums