2009-10-03 18 views
3

이것은 프로젝트에서 내가 수행 한 것입니다. 데이터를 조작하는 몇 가지 방법이있는 기본 사전 인 몇 가지 데이터 구조가 있습니다. 디스크에 저장하면 모듈로 가져올 때 같은 데이터를 같은 데이터 구조로로드하는 코드로 .py 파일에 코드를 씁니다.파이썬 모듈로 데이터를 저장하는 것이 합리적입니까?

이것은 합리적입니까? 큰 단점이 있습니까? 내가 본 이점은 저장된 데이터로 작업 할 때 필요한 모듈을 신속하게 가져올 수 있다는 것입니다. 또한 모듈은 별도의 구문 분석기 또는 로더 기능이 필요 없기 때문에 응용 프로그램의 나머지 부분과 별도로 사용할 수 있습니다.

+3

"로더"코드와 별도로 데이터를로드하는 기능으로 되돌아 와서 표준 또는 타사 라이브러리 (pickle, SimpleJSON, YAML 등)의 로더를 사용하면 이점도 있습니다. –

+1

기본적으로 Python은 .pyc 파일도 출력하므로 전체 데이터 크기가 거의 두 배가됩니다. 일반적으로 말하면, 바드 아이디어. sqlite를 고려해 보셨습니까? – gahooa

답변

3

그것은 합리적이며, 나는 항상 그렇게합니다. 분명히 데이터를 교환하는 데 사용하는 형식이 아니므로 저장 파일과 같은 형식에는 적합하지 않습니다.

예를 들어 웹 사이트를 Plone으로 마이그레이션 할 때 자주 마이그레이션해야하는 페이지 목록 또는 새 URL에 매핑 할 이전 URL 목록과 같은 사이트 데이터를 얻습니다. 태그 목록). 이들은 일반적으로 Word 형식의 Excel 형식으로 제공됩니다. 또한 데이터는 종종 약간의 마사지가 필요하며, 결국 모든 의도와 목적을 위해 하나의 URL을 사전에 다른 정보로 매핑하는 사전이 있습니다.

확실히, 나는 을으로 CVS로 저장하고 사전으로 구문 분석하십시오. 하지만 그 대신에 나는 전형적으로 사전을 가지고 파이썬 파일로 저장한다. 코드를 저장합니다.

네, 그렇습니다. 어떤 종류의 저장 파일에도 사용할 수있는 형식이 아닙니다. 그러나 종종 위와 같이 경계에 걸쳐있는 데이터에 사용됩니다.

3

가장 큰 단점은 파일에 임의의 코드가 포함되지 않는다는 것을 보증하기가 어렵다는 잠재적 인 보안 문제인데, 이는 실제로 좋지 않을 수 있습니다. 따라서 다른 사람이 파일에 대한 쓰기 권한을 가지고있는 경우이 방법을 사용하지 마십시오.

+1

아니요, 다른 사람들이 파일을 수정하는 것에 대해 걱정하지 않습니다. –

3

적절한 옵션은 파이썬 구조를 디스크에 저장하고 복원하도록 특별히 설계된 Pickle 모듈을 사용하는 것일 수 있습니다.

+2

그러나 동일한 보안 문제가 있습니다. 그리고 쉽게 편집 할 수 없습니다. –

+2

쉽게 편집 할 수 있습니다. : D 어쨌든, 나는 Pickle을 알고 있었지만 그 질문은 아니었다. –

7

이 방법을 사용하면 약간의 편리함을 얻을 수 있지만 그에 대한 많은 종류의 가격을 지불하게됩니다. 데이터를 저장하는 데 걸리는 공간과 데이터를 저장하고 다시로드하는 데 걸리는 시간이 크게 늘어납니다. 보안 노출은 제한되지 않습니다. 모듈을 다시로드하는 경로를 사기성있게 지켜야합니다. 공격자가 사용자 코드에서 실행되도록 자신이 선택한 코드를 쉽게 삽입 할 수 있기 때문에 (pickle 자체는 견고하지 않습니다. , 보안 현명하지만,이 배열에 비해, 그것은 빛난다 ;-).

대체로 간단하고 전통적인 배열을 선호합니다 : 모듈이 컴파일되면 실행 코드가 하나의 모듈에 저장됩니다 (일반적인 코드로드 경로에서는 R/W가 필요하지 않습니다). 이미 컴파일 된 양식에서 한 번만로드됩니다. 데이터는 JSON, CSV, XML 등의 다국어 파일을 포함하여 대부분 표준 형식의 파일 형식으로 자신의 파일 (또는 DB의 일부 등)에 저장됩니다. & c, 원하는 경우 나중에 다른 언어의 데이터를 쉽게로드 할 수 있도록 옵션을 열어 두십시오).

3

Alex Martelli의 대답은 절대적으로 통찰력이 있으며 나는 그에 동의합니다. 그러나 한 걸음 더 나아가 구체적인 권장 사항 인 JSON을 사용하겠습니다.

JSON은 간단하며 Python의 데이터 구조는 간단합니다. JSON을 사용하기위한 몇 가지 표준 라이브러리와 도구가 있습니다. 파이썬 3의 json 모듈.0 이상은 simplejson을 기반으로하기 때문에 Python 2.x에서는 simplejson을 사용하고 Python 3.0 이상에서는 json을 사용합니다.

두 번째 선택 사항은 XML입니다. XML은 좀 더 복잡하고보기 만해도 (또는 텍스트 편집기로 편집하기가 더 어렵습니다), 그 내용을 검증하고, 필터링하고, 편집 할 수있는 방대한 도구가 있습니다.

또한 데이터 저장 검색 요구 사항은 전혀 중요하지 않으며 실제 데이터베이스 사용을 고려하십시오. SQLite은 훌륭합니다. 작고 작은 데이터베이스의 경우 매우 빠르게 실행되지만 실제 실제 SQL 데이터베이스입니다. 나는 분명히 데이터베이스와 상호 작용하기 위해 SQL을 배우는 대신 Python ORM을 사용할 것입니다. SQLite에 대한 가장 좋아하는 ORM은 Autumn (작고 단순) 또는 ORM (Django)입니다 (SQL로 테이블을 만드는 방법을 배우지 않아도됩니다!) 그렇다면 SQLite를 능가하는 경우 실제 데이터베이스는 PostgreSQL입니다. 저장된 데이터를 검색하는 많은 루프를 작성하고 특히 종속성을 적용해야하는 경우 (예 : foo가 삭제 된 경우 막대를 삭제해야 함) 데이터베이스로 이동하는 것을 고려하십시오.

+0

모든 기술과 설명에 감사드립니다. 나는 그들 모두를 알지 못했다. –