2014-09-26 61 views
0

我希望我的问题有意义。如果IF声明是正确的,我希望加入最后2个索引,但我收到了错误。python加入列表中的最后两个索引

这里是我的文本文件:

AAA BBB CCC NY 10018  111111111E 
AAA BBB CCC DDD NY 11946222222222E 
AAA BBB CCC NY 10018  333333333E 
AAA BBB CCC DDD NY 11946444444444E 

这里是我的代码:

with open('O:/python1docs/sample_1.txt', 'rb') as infile: 

    data1 = [] 
    for row in infile: 
     row = row.strip().split() 
     rend = len(row) - 1 
     rend2 = rend - 1 
     rend3 = rend2 - 1 
     if len(row[rend]) == 10 and len(row[rend2]) == 5 and len(row[rend3]) == 2: 
      row = row[0:rend2] + ' ' + ''.join(row[rend2] + row[rend]) 
      data1.append(row) 
     else: 
      data1.append(' '.join(row)) 
    print '\n'.join(data1) 

错误消息我得到:

Traceback (most recent call last): 
    File "O:\python1\py_programs\lipa_newbiz3.py", line 12, in <module> 
    row = row[0:rend2] + ' ' + ''.join(row[rend2] + row[rend]) 
TypeError: can only concatenate list (not "str") to list 
[Finished in 0.2s with exit code 1] 

我可以加入任何单一指标,即: row = row[*] + ' ' + ''.join(row[rend2] + row[rend])和代码的作品,但是当我尝试加入所有的指数row[0:rend2] + ' ' + ''.join(row[rend2] + row[rend])它的错误o ut

任何帮助,非常感谢。 -Thanks

这就是我想要的

['AAA BBB CCC NY 10018111111111E'] 
['AAA BBB CCC DDD NY 11946222222222E'] 
['AAA BBB CCC NY 10018333333333E'] 
['AAA BBB CCC DDD NY 11946444444444E'] 

更长的路

for row in infile: 
    row = row.strip().split() 
    rend = len(row) - 1 
    rend2 = rend - 1 
    rend3 = rend2 - 1 
    row1 = [] 
    templist1 = [] 
    templist2 = [] 
    templist3 = [] 
    templist4 = [] 
    templist5 = [] 
    if len(row[rend]) == 10 and len(row[rend2]) == 5 and len(row[rend3]) == 2: 
     templist1.append(' '.join(row[0:rend2])) 
     templist2.append(row[rend2]) 
     templist3.append(row[rend]) 
     templist4.append(' '.join(templist1 + templist2)) 
     templist5.append(''.join(templist4 + templist3)) 
     print ' '.join(templist5) 
    else: 
     row = ' '.join(row) 
     print row 

这里是

for row in infile: 
    row = row.strip().split() 
    rend = len(row) - 1 
    rend2 = rend - 1 
    rend3 = rend2 - 1 
    if len(row[rend]) == 10 and len(row[rend2]) == 5 and len(row[rend3]) == 2: 
     row = ' '.join(row[0:rend2]) + ' ' + ''.join(row[rend2] + row[rend]) 
     print row 
    else: 
     row = ' '.join(row) 
     print row 
+0

'行[*]''是但String''行[0:rend2]'是'List'。所以你在'row = row [0:rend2] +''+''.join(row [rend2] + row [rend])'中将“String”连接到“List”。这是这个错误的原因。 – 2014-09-26 03:41:55

+0

我不明白。对于给定的输入,你能准确地显示出你想要的结果吗? – 2014-09-26 04:11:37

回答

1

你可以不适用 '+' 操作符把一个较短的方式列表类型

row = ' '.join(row[0:rend2]) + ' ' + ''.join(row[rend2] + row[rend]) 

tmplist = row[0:rend2] 
row = ' '.join(tmplist.append(''.join(row[rend2] + row[rend])))