2017-10-09 13 views
0

this post의 질문에 거의 완벽하게 설명되어있는 과정에서 Matplotlib 플롯의 png 파일을 BytesIO 인스턴스에 쓰고 있습니다. 그런 다음 각 인스턴스를 다른 BytesIO 인스턴스에 ZipFile의 인스턴스로 작성하고 zipfile.writestr 메소드를 호출합니다. 오류가 0x80070057 : 매개 변수가이 열립니다Python 3.5 zipfile을 사용하여 zip 아카이브에 파일 가져 오기 winzip에서 매개 변수가 잘못되었습니다.

잘못 플롯

zip_buff = BytesIO() 
with ZipFile(zip_buff, "w") as zipfile: 
    for number, data_set in enumerate(data_sets): 
     plot = write_plot(data_set) 
     zipfile.writestr("{}.png".format(number), plot.getvalue()) 
with open(file_path, "wb") as write_buff: 
    write_buff.write(zip_buff.getvalue()) 

그러나 내가 돌아올 우편 아카이브가 나에게 오류를 제공 보관 플롯

import pandas as pd 
import matplotlib.pyplot as plt 

def write_plot(data): 
    plot_buff = BytesIO() 
    fig, ax = plt.subplots() 
    dataframe = pd.DataFrame(data) 
    dataframe.plot(x="length", y="left", ax=ax, color="b") 
    dataframe.plot(x="length", y="right", ax=ax, color="r") 
    plt.savefig(plot_buff) 
    return plot_buff 

만들기

7-zip 형식으로 사용해도 좋지만 사용자에게 알리거나 시도 할 수는 없습니다.

편집 : 죄송합니다. 누락 된 "wb"매개 변수는 질문에서 오타였으며 실제 코드의 일부입니다.

+0

'with open (file_path)'은 읽기 전용이며 & text입니다. 이상하게도 작동합니다. 'open (file_path, "wb")'을 시도해 볼 수 있습니까? –

+0

죄송합니다. 오타였습니다. 쓰기 및 이진 모드로 open을 호출하고 있습니다. –

+1

이제 더 이상 스 니펫을 신뢰하지 않기 때문에 [mcve]에게 물어야합니다. –

답변

0

사과, 이건 좋지 않은 사례였습니다. 내가 가진 문제는 그걸로는 결정할 수 없었고 아주 간단했습니다. 완벽하게 검증 가능한 예제를 작성하는 과정에서 예제 코드가 WinZip으로 추출 할 수있는 png 이미지를 생성한다는 것을 발견했습니다. 이것은 내 실제 코드와 약간 다른 코드와 예제 사이의 참조 포인트를 주었다. 파일 이름에 ":"을 넣었습니다.