2017-10-19 41 views
1

PyYAML에 문제가 있습니다. 내가 잘못하고 있는지 확실하지 않습니다. 콘솔PyYAML은 파일에서로드 할 수는 없지만 쓸 수 있습니다

에 그러나 {foo: bar}

, print(yaml.load(f)) 출력 None : 메모장에서 그것이 나에게 이것을 보여줍니다

import yaml 
open("a", "w+") 
with open("a", "r+") as f: 
    yaml.dump({'foo':'bar'}, f) 
    print(yaml.load(f)) 

내가 디렉토리 파일 A의 볼이, 개방 : 이 코드입니다 나는 파일이 이미 열려 있거나 파일을 여는 데 사용하는 모드와 관련이 있다는 느낌이 들었다. 왜냐하면 나는 주변에서 어지럽 혔을 때 총 1 회의 작업을해야했기 때문이다. 나는 작동하지 않는 정확히 같은 작동을 다시 한 번 반복했다. None

+1

왜 '열기'("a", "w +")가 있습니까? –

+0

나는 새롭고 빈 파일을 만들었다는 인상을 받았다. –

답변

2

우선 open("a", "w+")은 유용하지 않습니다.

하지만 더 중요한 것은 yaml.dump(..., f) 일 때 파일 포인터가 파일의 끝에 있다는 것입니다. 이 시점에서 yaml.load(f)을 호출하면 파일의 끝 위치에서 읽히고 해당 파일의 위치 다음은 읽히지 않습니다.

그 시점에서 f.seek(0)을 할 수 있습니다. 그러면 문제가 해결됩니다.

예를 들어, 같은 열린 파일에서 읽고 쓰는 것이 분명하지 않지만 YAML은 파일을 업데이트하는 것이 좋지 않으므로 IMO에서 덤프 한 후에 항상 파일을 닫아야합니다.

문서화 된대로 yaml.load()은 안전하지 않을 수 있으며 거의 ​​사용하지 않아도됩니다. 대신 yaml.safe_load()을 사용하십시오.

import yaml 

with open("a", "w") as f: 
    yaml.safe_dump({'foo':'bar'}, f) 
with open("a") as f: 
    print(yaml.safe_load(f))