2014-09-26 30 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])))