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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python

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

Q&A

解決済

3回答

1338閲覧

pythonでreplace出来ない

yep

総合スコア45

Python

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

0グッド

0クリップ

投稿2018/12/26 09:32

編集2018/12/26 11:21

#やりたいこと
txtファイル中の2e+02のような数の'e+0'を削除し再度、戻したいと考えています。

数値をディープラーニングのデータに使いたいと考えています。
2e+02のままでは、生成した際に'e2++02'のような数値が生成されてしまう恐れがあるため、
そのまま'2e+02'を'22'としてデータとして使用します。
例えば、'31'のような数値を生成したとき、'3e+01'のように元の数値に戻したいと考えています。

#試したこと

python

1from PIL import Image 2import numpy as np 3 4image = np.array(Image.open('./Desktop/dog.jpg').convert('L')) 5 6print(image.shape, image.dtype) 7 8print(image) 9 10np.savetxt('./Desktop/image.txt', image, fmt='%.0e') 11 12f = open('./Desktop/image.txt') 13data = f.read() 14data.replace('e+0', '') 15f.close()
2e+02 2e+02 2e+02 2e+02 2e+02 2e+02 2e+02

#環境
python 3.6.7
numpy 1.15.4
ubuntu 18.04

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

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

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

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

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

dice142

2018/12/26 09:41

最終的に何がどうなればいいんでしょう? image.txtの中身ですか?それともimage.txtを読み込んだ後の標準出力ですか?
yep

2018/12/26 09:43

説明不足でした。image.txtの中身です。
can110

2018/12/26 10:22

やりたいことをそのままやってしまうと、2e+02(=200)が22になってしまいますが、それでかまいませんか?(「200」と出力したいのでは?)
yep

2018/12/26 11:15 編集

実は、数値をディープラーニングのデータに使いたいのですが、2e+02のままでは、生成した際に'e2++02'のようなメチャクチャな数値が生成されてしまう恐れがあるため、そのまま'2e+02'を'22'としてデータとして使用し、例えば、'31'のような数値を生成したとき、'3e+01'のように元の数値に戻したいと考えています。
can110

2018/12/26 11:20 編集

う~ん、ちょっとやりたいことが理解できませんが…では方向性はdice142さんの回答でよいかと思います。 ただ、画素値が120→(指数表現)→1.2e+02→(e+0を除去)→1.22のように小数点を含む文字列?を学習元データとして採用してしまうようですが、それはよいのでしょうかね?
yep

2018/12/26 11:23

何度もすみません。今回の場合は、2e+02のようなデータがあった場合は、'e+0'を除去したいと考えています。もし小数点を含んでしまった場合は、小数点も除去したいと思います。
can110

2018/12/26 11:27

fmt='%.0e'にすると小数点は出てこなくなりますね。 やりたいことについては了解しました。やはりdice142さんの回答でよいかと思います。
guest

回答3

0

fmt='%.1e'だと2002e+02のように指数表現で出力されてしまいます。
fmt='%.0fのようにすれば普通に200と出力できます。

Python

1import numpy as np 2a = np.array([200]) 3np.savetxt('image.txt', a, fmt='%.0f') 4 5f = open('image.txt') 6data = f.read() 7print(data) # '200' 8f.close()

投稿2018/12/26 10:25

can110

総合スコア38266

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

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

0

ベストアンサー

image.txtへの書き込みはnp.savetxt('./Desktop/image.txt', image, fmt='%.1e')の段階で行われています。

その後に

Python

1f = open('./Desktop/image.txt') 2data = f.read() 3data.replace('e+0', '') 4f.close()

としても、中身が変わることがありません。

二度手間でも良ければimage.txtを開いてcloseした後に、replaceしたものを再度同じファイルに書き込めばできるはずです。
あるいはnp.savetxt('./Desktop/image.txt', image, fmt='%.1e')の書き込みの前にimageをいじるとかですかね。

ちなみに、data.replace('e+0', '')では元のdataは置き換わらないので、再代入する必要があります。

投稿2018/12/26 09:53

編集2018/12/26 11:07
dice142

総合スコア5158

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

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

yep

2018/12/26 11:06 編集

import re file = open('./Desktop/image.txt', 'r') data = file.read() new_data = re.sub(r'e+0', '', data) file.close() 再代入してみました。変わりませんでした。
yep

2018/12/26 11:04

すみません。よく分からないのですが、closeした後に、また開いてreplaceを使ったとしても結果は変わらないのではないでしょうか。
dice142

2018/12/26 11:06

「replaceしたものを書き込めば」です。
dice142

2018/12/26 11:08

微妙にわかりにくかった表現を直してみました。 ですが、can110様の回答がおそらく最適解かと思います。
guest

0

落ち着いてやってみたら普通にできました。

python

1import re 2 3with open('./Desktop/image.txt') as file: 4 filedata = file.read() 5filedata = filedata.replace('e+0', '') 6with open(r'./Desktop/image.txt', 'w', encoding='utf-8') as file: 7 file.write(filedata)

投稿2018/12/26 20:10

yep

総合スコア45

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問