2016-10-25 3 views
1

입력 파일의 두 번째 열을 열거하려고했지만 내 코드가 아래 오류를 제공합니다. 아래 출력 파일을 가져 오기 위해 코드를 수정하려면 어떻게해야합니까?파일의 특정 열을 열거하는 방법

오류 :

Traceback (most recent call last): File "./rename_atoms.py", line 7, in print(item+index) TypeError: cannot concatenate 'str' and 'int' objects

내 코드 :

#!/usr/bin/python 

with open ('input.gro', 'r') as f: 
    for line in f: 
     column=line.split() 
     for index, item in enumerate(column[1]): 
      print(item+index) 

입력 파일 :

GRoups of Organic Molecules in ACtion for Science 
    18 
    1LIG  O 1 1.665 1.740 8.646 
    1LIG  O 2 0.877 2.044 7.947 
    1LIG  S 3 1.469 1.778 8.501 
    1LIG  S 4 1.340 1.695 8.487 
    1LIG  S 5 1.231 1.770 8.412 
    1LIG  N 6 1.282 1.801 8.268 
    1LIG  C 7 1.553 1.679 8.585 
    1LIG  C 8 1.523 1.805 8.360 
    1LIG  C 9 1.313 1.647 8.630 
    1LIG  H 10 1.418 1.875 8.271 
    1LIG  H 11 1.454 1.624 8.688 
    1LIG  H 12 1.100 1.691 8.403 
    1LIG  H 13 1.453 1.912 8.577 
    1LIG  H 14 1.174 1.869 8.184 
    1LIG  H 15 0.992 1.777 8.339 
    1LIG  H 16 1.037 1.853 8.217 
    1LIG  H 17 1.206 1.941 8.068 
    1LIG  H 18 0.939 1.914 8.137 
     0.00000 0.00000 0.00000 

원하는 출력 파일 :

GRoups of Organic Molecules in ACtion for Science 
    18 
    1LIG  O1 1 1.665 1.740 8.646 
    1LIG  O2 2 0.877 2.044 7.947 
    1LIG  S1 3 1.469 1.778 8.501 
    1LIG  S2 4 1.340 1.695 8.487 
    1LIG  S3 5 1.231 1.770 8.412 
    1LIG  N1 6 1.282 1.801 8.268 
    1LIG  C1 7 1.553 1.679 8.585 
    1LIG  C2 8 1.523 1.805 8.360 
    1LIG  C3 9 1.313 1.647 8.630 
    1LIG  H1 10 1.418 1.875 8.271 
    1LIG  H2 11 1.454 1.624 8.688 
    1LIG  H3 12 1.100 1.691 8.403 
    1LIG  H4 13 1.453 1.912 8.577 
    1LIG  H5 14 1.174 1.869 8.184 
    1LIG  H6 15 0.992 1.777 8.339 
    1LIG  H7 16 1.037 1.853 8.217 
    1LIG  H8 17 1.206 1.941 8.068 
    1LIG  H9 18 0.939 1.914 8.137 
     0.00000 0.00000 0.00000 

답변

1

문제는이 라인에 : 당신은 INT (index) 및 문자열 (item)를 추가하려고

for index, item in enumerate(column[1]): 
>>  print(item+index) 

. 그냥 함께 인쇄하려면 다음을 수행하십시오.

print(item, index) 

기본적으로 인수 사이에 공백이 추가됩니다. 이를 제거하려면 sep 인수를 사용하고 빈 문자열로 설정하십시오. 그래서

O 0 
O 0 
S 0 

... 그리고 : 출력 뭔가처럼 될 것 같은

그러나 이것은 아마도 당신이 원하는 없습니다. 그래서

O0 
O1 
S2 

... 그리고 :

for i, l in enumerate(f): 
    column = l.split() 
    print(column[1],i,sep='') 

이 될 것 같은 것을 :

그래서, 이렇게.

거의 다. 원하는 출력을 얻으려면 각 요소의 수를 유지해야합니다. 그래서

O1 
O2 
S1 

... 그리고이 인쇄해야

from collections import defaultdict 

counts = defaultdict(int) 
for l in f: 
    column = l.split() 
    counts[column[1]] += 1 
    print(column[1], counts[column[1]], sep="") 

: 그래서, 이런 식으로 뭔가를하려고합니다.

+0

코드는이 오류를 제공합니다 :'File "./rename_atoms.py", 줄 9 print (열 [1], 개수 [열 [1]], sep = '') SyntaxError : invalid syntax'. 그것은'sep = ''를 가리킨다. – qasim

+1

그렇다면이 질문에'python2' 태그도 붙이고'print column [1] + str (counts [column [1]])'대신' – ThatWeirdo

+0

'이 작동한다. . 그러나 원하는 출력 파일을 얻으려면 어떻게해야합니까? (질문 끝에 원하는 출력 파일을 참조하십시오)? – qasim

0

int와 문자열을 연결할 수 없습니다. + 함수에는 호환되지 않는 유형입니다. 인덱스를 int에서 string으로 변환 한 다음 연결해야합니다. 라인 7에서 시도 :

 print(item+str(index)) 
+0

은 내가했지만 밖으로 코드를 인쇄이'O0 O0 S0 S0 S0 N0 C0 C0 C0 H0 H0 H0 H0 H0 H0 H0 H0 H0', 그건 내가 원하는 바가 아니야. – qasim

관련 문제