문제

이것이 제가 프로젝트를 위해 한 일입니다. 데이터에서 작동하는 몇 가지 방법으로 기본적으로 사전 인 몇 가지 데이터 구조가 있습니다. 디스크에 저장하면 모듈로 가져올 때 동일한 데이터를 해당 데이터 구조에로드 할 수있는 코드로 .py 파일에 씁니다.

이건 합리적입니까? 큰 단점이 있습니까? 내가 보는 장점은 저장된 데이터로 작동하고 싶을 때 필요한 모듈을 빠르게 가져올 수 있다는 것입니다. 또한 별도의 파서 또는 로더 기능이 필요하지 않기 때문에 모듈은 나머지 애플리케이션에서 별도로 사용할 수 있습니다.

도움이 되었습니까?

해결책

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

그러나 예를 들어, 웹 사이트를 Plone으로 마이그레이션 할 때 종종 사이트에 대한 데이터 (예 : 마이그레이션 해야하는 페이지 목록 또는 새 제품에 맵핑되어야하는 오래된 URL 목록, AOR 태그 목록의 목록과 같은 데이터를 얻습니다. ). 이것들은 일반적으로 Word och Excel 형식으로 얻습니다. 또한 데이터는 종종 마사지가 필요하며, 모든 의도와 목적을 위해 하나의 URL을 다른 정보에 매핑하는 사전이 무엇인지 끝납니다.

물론, 나는 ~할 수 있었다 그것을 CVS로 저장하고 사전으로 구문 분석하십시오. 그러나 대신 나는 일반적으로 사전이있는 Python 파일로 저장합니다. 코드를 저장합니다.

예, 합리적입니다. 아니요, 모든 종류의 저장 파일에 사용해야하는 형식이 아닙니다. 그러나 위와 같이 테두리를 구성 할 수있는 데이터에 종종 사용됩니다.

다른 팁

이런 식으로 운영함으로써 편의성을 얻을 수 있지만 많은 종류의 가격을 지불 할 수 있습니다. 데이터를 저장하는 데 걸리는 공간과 저장 및 재 장전 모두에 걸리는 시간은 크게 올라갑니다. 그리고 보안 노출은 무한대입니다. 모듈을 다시로드하는 경로를 격렬하게 보호해야합니다. 모든 공격자가 사용자가 선택한 코드를 userID (userId)에 실행할 수있는 쉬운 길을 제공 할 수 있으므로 (pickle 그 자체는 바위가 풍부하고 보안 측면이 아니지만,이 배열과 비교할 때, 그것은 빛납니다 ;-).

대체로, 나는 더 간단하고 전통적인 배열을 선호합니다. 실행 가능한 코드는 한 모듈 (일반적인 코드로드 경로에서 모듈이 컴파일되면 r/w 일 필요가 없음)에 살고 있습니다. 한 번만로드하고로드됩니다. 이미 컴파일 된 양식에서. 데이터는 자체 파일 (또는 DB 등의 일부)에 적합한 다양한 형식 중 하나, 대부분 표준 형식 (아마도 JSON, CSV, XML, ... & C 포함 ... 옵션은 향후 다른 언어에서 해당 데이터를 쉽게로드 할 수 있도록 열려 있습니다).

가장 큰 단점은 파일에 임의 코드가 포함되지 않도록 보장하기가 어렵 기 때문에 잠재적 인 보안 문제라는 것입니다. 따라서 파일에 쓰기 액세스가없는 사람이라면이 접근법을 사용하지 마십시오.

합리적인 옵션은 간물 파이썬 구조를 디스크로 저장하고 복원하도록 특별히 설계된 모듈.

Alex Martelli의 대답은 절대적으로 통찰력이 있으며 나는 그에게 동의합니다. 그러나 한 걸음 더 나아가서 특정 권장 사항을 작성하겠습니다. JSON을 사용하십시오.

JSON은 간단하고 Python의 데이터 구조는 잘 매핑됩니다. 그리고 JSON과 협력하기위한 몇 가지 표준 라이브러리와 도구가 있습니다. 그만큼 json Python 3.0 및 Newer의 모듈은 기반입니다 Simplejson, 그래서 나는 사용할 것입니다 simplejson Python 2.X에서 json Python 3.0 및 새로.

두 번째 선택은 XML입니다. XML은 더 복잡하고 텍스트 편집기를 보거나 편집하기가 더 어렵지만 (텍스트 편집기로 편집) 유효성을 검사하고 필터링하고 편집하는 등 다양한 도구가 있습니다.

또한 데이터 저장 및 검색 요구가 전혀 사소하지 않으면 실제 데이터베이스 사용을 고려하십시오. sqlite 훌륭합니다 : 작고 작은 데이터베이스의 경우 매우 빠르게 실행되지만 실제 SQL 데이터베이스입니다. 데이터베이스와 상호 작용하기 위해 SQL을 배우는 대신 Python ORM을 분명히 사용합니다. 내가 가장 좋아하는 SQLITE가 될 것입니다 가을 (작고 단순) 또는 ORM 장고 (SQL에서 테이블을 만드는 방법을 배울 필요조차 없습니다!) 그런 다음 SQLITE를 능가하면 다음과 같은 실제 데이터베이스로 이동할 수 있습니다. PostgreSQL. 저장된 데이터를 통해 검색하는 많은 루프를 작성하는 경우, 특히 종속성을 시행 해야하는 경우 (FOO가 삭제 된 경우, 막대도 삭제해야 함) 데이터베이스로 이동하는 것을 고려하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top