2017-04-23 5 views
0

그래서 .csv 파일 (이 파일을 클릭하면 다운로드 할 수 있습니다 : http://ge.tt/7lx5Boj2/)을 가져와 2D 목록으로 변환하고 싶습니다.2D 목록에서 문자열 문자를 대체하는 방법은 무엇입니까?

내 코드는 현재 그렇게하고 있지만 한 가지 문제가 있습니다.

중첩 된 목록의 각 요소는 중첩 된 각 목록의 처음과 끝에 아포스트로피가 추가되기 때문에 요소 목록이 아닌 큰 문자열로 읽혀집니다. 예를 들어

, 대신 :

["ID","Name","Type 1","Type 2","Generation","Legendary"] 

나는 점점 오전 :

['"ID","Name","Type 1","Type 2","Generation","Legendary"'] 

는이 문제를 해결하려면, 나는 루프 빈으로 목록에있는 모든 아포스트로피를 대체하기 위해 중첩 만들려고 문자하지만 내 코드는 아무것도하지 않습니다. 바꾸기 작업이 전혀 일어나지 않았을 때와 똑같은 문자열을 출력합니다.

def read_info_file(filename): 
     opened_infocsv = open(filename, 'r') #opens an argued .csv file with INFO ormat. 
     linebylinelist = [fline.splitlines() for line in opened_infocsv] #converts entire .csv into a 2D list 
     opened_infocsv.close() 

     print(linebylinelist) 
     print('\n') 

     for i in linebylinelist: 
      for l in i: 
       l.replace("'","") 

     print(linebylinelist) 

    read_info_file('info_file5.csv') 

해결 방법에 대한 의견이 있으십니까? 참고 : CSV를 가져올 수 없습니다.

EDIT : .strip을 변경하려고 시도했지만 여전히 작동하지 않습니다. 솔직히이 문제를 해결할 방법이 없다.

필자는 문제의 근원이 목록 이해를 사용하여 CSV를 2 차원 목록으로 변환하는 방식과 관련이 있다고 생각합니다. 어쩌면 선을 먼저 문자열로 변환하지 않고 CSV를 2 차원 목록으로 변환 할 수 있습니다.

+0

적어도 파이썬의 csv 라이브러리를 사용하는 것이 좋습니다. 이렇게하면 분할하거나 대체 할 필요없이 각 행을 자동으로 값 목록으로 변환합니다. –

+0

불행히도 CSV 가져 오기가 허용되지 않습니다. – ruckarucka

답변

0

str.replace은 현재 문자열을 변경하지 않습니다. 문자열의 하위 문자열이 모두 new로 교체 된 문자열을 반환합니다. 함수의 결과를 현재 목록 항목에 지정해야합니다.

for i in linebylinelist: 
    for kk,ss in enumerate(i): 
     i[kk] = ss.replace("'","") 
+0

"ss, kk"표기법에 익숙하지 않습니다. 이것이 무엇을하고 있는지 설명해 주시겠습니까? 또한, 자리에 직접 대체 할 수있는 방법이 있습니까? 나는 또한 "int 객체에 속성이 없다"라는 오류가 발생했습니다. – ruckarucka

+0

http://stackoverflow.com/questions/22171558/what-does-enumerate-mean – napuzba

+0

링크 주셔서 감사합니다. 게시 한 솔루션이 작동하지 않습니다. – ruckarucka

0

csv 모듈을 사용하여 csv 파일을 읽습니다.

또한 파일을 열려면 context manager을 사용하십시오. 예를 들어, 아래 코드를 참조하십시오.

import csv 
filename = 'info_file5.csv' 
with open(filename, 'r') as f: 
    reader = csv.reader(f) 
    for row in reader: 
     print(row) 
+0

불행히도 CSV 파일을 가져올 수 없습니다. – ruckarucka