2017-12-20 3 views
3

파이썬 사전 목록을 파일에 작성하고 싶습니다. 그러나 사전을 유지하려면 사전 (및 목록)이 필요합니다. 즉, 처리를 위해 파일을로드 할 때 사전을 사용하고 문자열로 작업하지 않아도됩니다.파이썬 사전을 문자열로 만들지 않고 파일에 쓰는 방법?

여기에 데이터를 문자열로 쓰는 샘플 코드가 있습니다. 실제 파이썬 데이터 구조를 유지하는 방법이 있습니다 (목록 데이터에는 수십 개의 사전이 있으며, 각각의 값은 수백 개의 목록을 가질 수 있습니다) . 필자는 여러 가지 이유로 데이터를 간단하게 피클링 할 수 없습니다 (그 중 하나는 파일을 사람이 읽을 수 있어야합니다).

import csv 
import pandas as pd 

def write_csv_file(data, iteration): 
    with open('%s.csv' % 'name', 'wb') as data_csv: 
     writer_data = csv.writer(data_csv, delimiter=',') 
     for d in data: 
      writer_data.writerow([iteration] + [d]) 


data = [{'a':1, 'b':2}, {'e':[1], 'f':[2,10]}] 
iteration = 1 
write_csv_file(data, iteration) 

현재 나는 데이터를 처리하기 위해 다음과 같은 방식으로 팬더를 사용하여 데이터 파일을 읽습니다.

d = pd.read_csv('name.csv') 
d = pd.DataFrame(d) 
+0

** 불가능 **. 파일에 쓰거나 * 읽는 모든 것은'string'입니다. 'dict'에서'string'으로 또는 그 반대로 이동하는 영리한 방법을 찾아야합니다.또는 어떤 종류의 라이브러리를 사용하십시오. –

+1

몇 가지 형식의 serialization이 필요합니다. 'pickle' 또는'json'. – Norrius

+3

@ Ev.Kounis 그게 스트레치예요. 어떻게 문자열을 정의합니까? 나에게 그것은 인간이 읽을 수있는 일련의 등장 인물이다. 그러나 파일은 바이트를 처리합니다. 파일에 임의의 바이트 시퀀스를 쓸 수 있습니다. 예를 들어,'pickle'으로 생성 된 직렬화 된 사전을 사용할 수 있습니다. – timgeb

답변

1

(다른 답변에 @jsbueno 작성한 것과 유사한) JSON 파일로 덤프 데이터를 기록 할 수있는 예제 함수 다음은 json

라는 JSON 파일을 읽고 쓸 수있는 파이썬 모듈이된다 Python 2.6부터는 ast.literal_eval을 사용할 수 있습니다. 당신의 팬더 DataFrame의 전체 열이 딕셔너리 인 경우

import ast 
ast.literal_eval('{"a":1, "b":2, "c":3}') 
{'a': 1, 'b': 2, 'c': 3} 

, 당신은 normaly (, 이외의 구분 기호) CSV에 저장할 수 있습니다 후 사전에이 사전 같은 열 문자열을 매핑 :

df['DICTIONARY_COLUMN'].map(ast.literal_eval) 

당연히 당신은 데이터 프레임 부분을 무시할 수 있습니다. 루프 또는 원하는 방식으로 변환 할 수도 있습니다. 중요한 부분은 ast.literal_eval이고 쉼표가 아닌 구분자를 사용합니다 (dict-like 문자열에서 쉼표를 사용하기 때문에).

5

그냥 https://docs.python.org/3/library/pickle.html

import pickle 

def write_csv_file(data): 

    with open('%s.pickle' % 'name', 'wb') as data_file: 
      pickle.dump(data, data_file) 

피클이 제대로 직렬화 및 날짜 - 시간을 포함하여, 데이터 유형의 전체 호스트를 복구하고 대부분의 사용자 정의하는 파일에 데이터를 작성하는 대신 CSV의 pickle를 사용 클래스를 즉시 사용할 수 있습니다.

그러나 타사 도구를 사용하여 수동으로 파일을 편집하거나 사람이 읽을 수 있기를 원하면 최상의 선택이 아닐 수도 있습니다.

숫자, 불리언, 목록 및 사전 만 있으면되고 사람이 읽을 수있는 텍스트 파일을 선호한다면 JSON을 선택하는 것이 좋습니다. Python의 json 모듈은 파일에 쓰고 읽을 수있는 dumpload 호출 가능 코드와 함께 동일한 인터페이스를 사용합니다. 위의 코드 스 니펫에서 picklejson으로 바꾸면 규정 된 데이터 유형과 동일하게 작동합니다. 또한, 진정한 읽을 수 있도록 json 직렬화 출력에 좋은 들여 쓰기가 채워지도록 문서를 확인하십시오.

+0

인간이 읽을 수 있어야합니다. – user58925

+0

@ user58925 : 그런 다음 JSON을 사용하십시오 ... –

3

당신이하려고하는 것은 data serialization이라고 생각합니다. 가장 일반적인 직렬화 형식은 JSON입니다. 그리고

import json 

def write_json_file(data): 
    with open('%s.json' % 'name', 'wb') as data_file: 
      json.dump(data, data_file) 
관련 문제