나는 최근에 YAML을 발견했으며, 내 프로젝트를위한 환상적인 포맷으로 판명되었다. (나는 텍스트 기반 RPG를 만들고있다.) 그것은 내가 완벽하게 필요로하는 모든 것을 다루고 있습니다 - 영역 파일들 (desc, exit, objs, npcs 등의 방), 스크립트 파일, npc 파일, 객체 파일 ... 그것들 모두를 다루십시오! 단 하나만 있습니다 ..."yaml.dump()"가 파일을 저장하는 방법을 좋아하지 않습니다. 대안이 있습니까?
이 파일의 값을 업데이트 할 때 변경 사항을 유지하려면 디스크에 다시 기록해야합니다. 불행히도 YAML의 dump()
메소드는 실제로 모든 것을 엉망으로 만든다. 먼저 모든 키를 영문자 순으로 정렬하면 한 줄에 하나의 k : v 쌍이 표시됩니다. 이렇게하면 효과적으로 5 줄의 파일을 가져 와서 94 줄로 바꿨습니다.
나는 YAML은 write()
를 사용하여 디스크로 다시 개체를 작성 해봤지만 나를
TypeError: expected a character buffer object
가 발생합니다. Pickle은 그것을 구할 것이나, 나는 그것이 YAML의 데이터를 파괴 할 것이라고 생각한다. dump()
없이 YAML 객체를 저장하는 좋은 방법이 있습니까? SQLite에 대한 언급을 들었습니다. YAML과 동일하게 작동합니까? 데이터베이스 경험이 거의 없지만 YAML 개체는 기본적으로 데이터베이스 인 것 같습니다. SQLite를 사용하기 위해 모든 것을 다시 코딩 할 가치가 있습니까? 지금 가지고있는 문제와 달리 변경된 값을 쉽게 저장할 수 있습니까?
여기에서 도움을 받으실 수 있습니다. 나는 YAML을 많이 사랑합니다. 나는 내 게임에 필요한 모든 데이터를 저장하는 방법을 찾기 위해 오랜 시간 노력했습니다. YAML을 발견했을 때 마치 천사의 합창이 그 위에 영광을 불어 넣은 것처럼 거룩한 빛으로 빛나는 것처럼 보였습니다. 내가 먼저 dump()
을 사용하지 않고 YAML 데이터를 디스크에 저장하는 방법을 알고 싶습니다. 그렇지 않다면, 제안은 감사하겠습니다!
그러나 이것은 문제가되지 않습니다. YAML은 데이터를 사람이 읽을 수있는 형식으로 저장하는 데 적합합니다. 일단로드하면 원시 Python 데이터 구조를 가지므로 메모리를 사용하면서 현실적으로 제공 할 수있는 데이터베이스보다 빠른 액세스가 가능합니다. DBs는 데이터가 한 번에 메모리에있을 수없는 경우에 성공합니다. – delnan
나는 파이썬에서 SQLite에 대해 이야기하는 몇 개의 vids를 조사했는데 그 경로를 배우는 것이 많은 것처럼 보였다. 내가 가지고있는 유일한 문제는 조금씩 내 진도를 멈출 수 있다는 것입니다. 그러나 단순히 2 차원 사전 객체에 액세스하는 것보다 더 강력 할 수 있습니다. 데이터베이스가 YAML과 비교할 때 얼마나 느리게 걸릴까요? 만약 내가 각 행이 그 지역의 1 개의 방에 필요한 모든 데이터를 보유하고 있고 50 개의 방이있는 데이터베이스에 매핑 된 영역이 있다면 그것은 정말로 그렇게 느린가? –
문자열 처리가 덜 필요하기 때문에 일반적으로 데이터베이스는 YAML보다 빠릅니다 (그러나 DB 구조를 얼마나 잘 설계했는지에 따라 다름) – ncoghlan