質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1996閲覧

(プログラミング初心者)Pythonでリストに乱数を保存するファイルを作成するコードのエンコーディングエラー

jetninzwin

総合スコア2

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/04/09 03:28

前提・実現したいこと

Pythonを勉強中で、下のコードを文字化けなく正しく実行したいです。

発生している問題・エラーメッセージ

作成されるtemp.txtファイルの内容が文字化けしてしまい、「間違ったエンコーディングでファイルがロードされました」と出ます。IDEはPycharmです。

間違ったエンコーディングでファイルがロードされました

該当のソースコード

Python

1import sys 2sys.setrecursionlimit(10000)#エラー回避 3import joblib 4import random 5#一時的に数値を保存する用 6temp_list=[] 7#乱数を一時リストに書き込み 8for i in range(100): 9 a = random.uniform(1, 10)#適当な乱数 10 temp_list.append(a)#リストに追加 11#書き出し処理 12joblib.dump(temp_list, "temp.txt",compress=3)

試したこと

Googleでいろいろ検索してみましたが、同じような問題の解決策はありませんでした。

補足情報(FW/ツールのバージョンなど)

文字コードはutf-8を使用しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

joblib.dump(〜) が作るファイルはテキストファイルじゃありません
テキストファイルじゃないものにtxtという拡張子を付けているので、PyCharmはテキストファイルとして読みこもうとしますが、PyCharmが扱えるすべてのエンコーディングで試してみても当然うまく読み出せん。それでエラーになります。


リストを単純に文字列に変換すると同じ形になるので、基本的なファイルへの書き出しで十分そうですね。

https://docs.python.org/ja/3/tutorial/inputoutput.html#reading-and-writing-files
https://docs.python.org/ja/3/library/functions.html#print

python

1with open("temp.txt", "w") as w: 2 print(temp_list, file=w)

でいいと思います。

投稿2021/04/09 03:36

編集2021/04/10 06:57
quickquip

総合スコア11235

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jetninzwin

2021/04/09 07:41

回答ありがとうございます。 ではjoblib.dumpは何のファイルを作るのでしょうか。 調べてみてもよく分からないので、どうすればよいのか教えていただければ幸いです。
quickquip

2021/04/09 16:24

何のファイルを作るのかよくわからないものを使ったら自分の意図したものではなかったのですがそれはなぜですか? という質問だったのでしょうか???? それは相当変なことを言っていると思います。 どちらかというと、どういう意図でjoblib.dumpを使ったのかと聞きたいのはこちら側です。pythonでファイルに書き出す方法が一切わかってなくて、何も分からずjoblib.dumpを使ったということでしょうか? そうだと仮定してもどうやってjoblib.dumpにたどり着けるのかが謎で、想定を超えています。 joblib.dumpはやりたいこととは全然関係なくて、 7.996936680418009 9.775967840488224 7.662502036237454 7.433275360958101 7.311264711401098 みたいなテキストファイルを作りたいという意図で合ってますか? (joblib.dumpはjoblib.loadと対になっていて、joblib.load読み出せる形式でファイルを作るものです)
jetninzwin

2021/04/10 04:50

説明不足ですいません。 やりたいことは素数を自動でリストに入力して表示することで、別のファイルにリスト型式で格納する方法を調べているうちにwebで上のコードを見つけたのでとりあえず動かしてみようと思ったらエラーが出て困っていたというところです。 joblib.dumpはやりたいことと関係なさそうなので、別の方法でやってみたいと思います。 ありがとうございました。
quickquip

2021/04/10 04:58

> 自動でリストに入力して表示する > 別のファイルにリスト型式で格納する この表現でどういう形式のファイルで保存しようとしているか伝わっていると思っているのでしたら、それは間違いですよ。 [2, 3, 5] と書きたいのか 2 3 5 と書きたいのか(それとも別のなにかなのか)判断できません。人間相手にすら伝えられないのが本当の問題だと思います。 https://teratail.com/help/question-tips#questionTips3-4-3 のヒントは大事ですよ。
jetninzwin

2021/04/10 06:28

分かりづらくてすいません。 [2, 3, 5, ...]と書きたいです。
jetninzwin

2021/04/10 10:14

ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問