-
Python - ','구분 없는 리스트 형태의 문자열을 리스트로 바꾸기(str -> list)(str에 저장되어있는 list를 list로 바꾸기)프로그래밍/Python 2021. 1. 3. 04:00반응형
간혹 [1,2,[3,4,]]와 같은 리스트가 list형태가 아닌, str형태로 저장되어있을 떄가 있다.
주로, 데이터를 txt로 저장하여 다른 프로그램에서 그것을 참조하거나, 협업 프로젝트에서 서로의 데이터를 주고받을 때 그런 현상이 나타난다. 이외에도 다양한 상황에서 이러한 문제가 발생한다.
이럴때 list형태로 다시 바꾸어야지 원하는 형태로 사용가능하다.
간단하게 json모듈, ast모듈을 사용해서 이것을 수행할 수 있으나,
간혹 데이터가 여러 리스트들이 ','(comma)구분없이 들어올 때가 있다.
이 경우, 직접 이 각 리스트들의 끝을 직접 찾아서 바꾸어주어야 하는 번거로움이 생긴다.
필자 또한 이러한 문제에 직면했다. 그리고 데이터 양이 하나에 100mb가 넘어가는 것을 보고 직접하는 것을 포기하고 이를 대신 수행해줄 함수를 제작하였다. 다음 코드가 해당내용이다.
이 함수를 통해
[1,2][3,4][5,6,[7,8]]과 같은 ',' 없는, string형태의 리스트들의 연속을 list로 바꿀 수 있다.
<json 모듈을 import 해주어야한다.>
import json def convertToList(string): #string -> list def find_index(data, target): res = [] lis = data while True: try: res.append(lis.index(target) + (res[-1] + 1 if len(res) != 0 else 0)) lis = data[res[-1] + 1:] except: break return res res = ([[i, 'f'] for i in sorted(find_index(string, '['))] + [[i, 'b'] for i in sorted(find_index(string, ']'), reverse=True)]) res.sort(key=lambda x: x[0]) k = 0 cnt = 0 for key in res: if key[1] == 'f': cnt += 1 else: cnt -= 1 if cnt == 0: if key[0] + k + 1 != len(string): string = (string[:key[0] + k + 1] + ',' + string[key[0] + 1 + k:]) k += 1 return json.loads(('[' + string + ']').replace("'", '"'))
>사용 예시
print(convertToList("[1,2][3,4][5,6,[7,8]]"))
>출력
[[1, 2], [3, 4], [5, 6, [7, 8]]]
[Finished in 0.2s]반응형'프로그래밍 > Python' 카테고리의 다른 글
Python - 현재 시간을 파일이름(파일명)으로 사용하기(datetime) (0) 2021.01.27 판다스 두 DataFrame 에서의 동일여부, 다른부분(차이점) 찾기 (0) 2021.01.25 python pynput모듈의 사용을 통한 마우스/키보드 제어 (0) 2020.12.01 pyautogui 메세지 출력 (0) 2020.11.30 간단히 파이썬 트레이 아이콘(pystray) 사용하기(multiprocessing과 함께) (0) 2020.11.30