2

現在、io モジュールのドキュメントを読んでいます: https://docs.python.org/3.5/library/io.html?highlight=stringio#io.TextIOBase

Python をよく知らないからかもしれませんが、ほとんどの場合、Python のドキュメントを理解していません。

データをaddresses_listcsv ファイルに保存し、https 経由でユーザーに提供する必要があります。したがって、これらはすべてメモリ内で発生する必要があります。これはそのコードで、現在は正常に動作しています。

addresses = Abonnent.objects.filter(exemplare__gt=0)
addresses_list = list(addresses.values_list(*fieldnames))

csvfile = io.StringIO()
csvwriter_unicode = csv.writer(csvfile)
csvwriter_unicode.writerow(fieldnames)

for a in addresses_list:
    csvwriter_unicode.writerow(a)
csvfile.seek(0)

export_data = io.BytesIO()
myzip = zipfile.ZipFile(export_data, "w", zipfile.ZIP_DEFLATED)
myzip.writestr("output.csv", csvfile.read())
myzip.close()
csvfile.close()
export_data.close()

# serve the file via https

問題は、csv ファイルの内容をutf-8ではなくcp1252でエンコードする必要があることです。伝統的に、私はすべてのデータを書き込んでそこにダンプしていました。しかし、メモリ内ストリームでは、そのようには機能しません。両方とも、パラメータを取らないでください。f = open("output.csv", "w", encoding="cp1252")io.StringIO()io.BytesIO()encoding=

これは、ドキュメントを理解するのに苦労している場所です。

テキスト ストリーム API については、TextIOBase のドキュメントで詳しく説明されています。

そしてTextIOBase のドキュメントには次のように書かれています:

エンコーディング=

ストリームのバイトを文字列にデコードし、文字列をバイトにエンコードするために使用されるエンコーディングの名前。

しかし、io.StringIO(encoding="cp1252")単にスローします: TypeError: 'encoding' is an invalid keyword argument for this function.

では、TextIOBase のエンコンディング パラメータを StringIO で使用するにはどうすればよいでしょうか。または、これは一般的にどのように機能しますか?私はとても混乱しています。

4

2 に答える 2