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

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

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

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

Q&A

解決済

2回答

1090閲覧

テキストの文字を変えたい

Kirari

総合スコア32

Python

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

0グッド

0クリップ

投稿2020/08/10 01:05

前提・実現したいこと

テキストデータの文字を変更したい。
テキストデータは以下で、/→”1”に変更したいのですが、
pythonの実行をかけると、データが消えてしまいます。
色々と試してみたのですが、うまくいかず困っています。
アドバイス、コメントいただけないでしょうか。

text.txtデータ
khakhkhkhdaih/////////akjlkjdlakjdlkadjlkadj//////kldjsajdklajdlkjlkjdlkajdl

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

エラーメッセージは出ていませんが、テキストのデータが無くなります。

該当のソースコード

python3

1data=open('C:/Users/XYXYXYX/Desktop/text.txt',"r",encoding='utf-8') 2for line in data: 3 print (line) 4txt=data.read() 5 6with open('C:/Users/XYXYXYX/Desktop/text.txt',"w") as f: 7 txt = txt.replace('/','1') 8 f.write(txt) 9 10data.close()

試したこと

txt.replace('/','1')を、re.sub(r'('/','1'),data)として実行しましたが、
うまくいきませんでした。

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

python3.7

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

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

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

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

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

guest

回答2

0

ベストアンサー

Python

1for line in f: 2 print (line) 3txt=f.read()

において、for line in fループでファイルデータをすべて読み終えてしまっています。
そのためtxt=f.read()では何も読み込まれないため、提示のような現象が起きています。
とりあえずこのループを取り除けば意図した動作をするようになります。

投稿2020/08/10 01:39

can110

総合スコア38266

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

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

Kirari

2020/08/10 01:46

ありがとうございました。 うまく起動しました。わかりやすい説明ありがとうございました。
guest

0

for文でdataの内容を末尾まで読み取った後なので、data.read()では空文字列''が返されてtxtに設定されます。

for文をそのまま残すとしたら、data.read()の直前にdata.seek(0)を書いて、ファイル位置を先頭に戻してください。
あとは、data.close()を早めに(書き込みをする前に)行なった方がいいと思います。

Python

1data = open('C:/Users/XYXYXYX/Desktop/text.txt', "r", encoding='utf-8') 2for line in data: 3 print(line) 4data.seek(0) 5txt = data.read() 6data.close() 7 8with open('C:/Users/XYXYXYX/Desktop/text.txt', "w") as f: 9 txt = txt.replace('/', '1') 10 f.write(txt) 11

投稿2020/08/10 01:32

Daregada

総合スコア11990

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

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

Kirari

2020/08/10 01:45

ありがとうございました。 うまく起動しました。またわかりやすい説明ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問