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

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

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

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

Q&A

解決済

3回答

2806閲覧

pythonでファイルを書き換えたいです。

sususu

総合スコア99

Python

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

0グッド

0クリップ

投稿2019/01/06 03:43

いつもお世話になります。
下記の『address = xxx』の『xxx』の中身の値を名前([suzuki])で検索して書き換えたいです。

[sato] address = tokyo [suzuki] address = kanagawa [ito] address = saitama

下記が書き換えファイルです。
nameの変数の中にsuzukiが入った場合[suzuki]を探し出してその次の行にある
address = kanagawa を address = osaka といった具合に書き換えたいです。

name = "suzuki" new_address = "osaka" with open('testconfig.ini','r') as f: lines = f.readlines() for line in lines: print(line)

write文を使用して何度か挑戦してみましたができません。
どなたかご教授お願いいたします。

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

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

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

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

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

guest

回答3

0

ベストアンサー

ファイルを書き換えるわけではありませんが、変更結果を標準出力へ出力するサンプルです。

python3

1import re 2name = "suzuki" 3new_address = "osaka" 4 5with open('testconfig.ini','r') as f: 6 lines = f.readlines() 7 flag = 0 8 for line in lines: 9 if flag == 1: 10 m = re.search("^\s*address\s*=\s*(\S+)\s*$",line) 11 if m != None: 12 line = re.sub(m.group(1),new_address,line) 13 flag = 2 14 print(line,end="") 15 if flag == 0: 16 if re.search("^\s*[" + name + "]\s*$",line): 17 flag = 1 18

投稿2019/01/06 04:51

tatsu99

総合スコア5438

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

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

sususu

2019/01/06 06:37

サンプルまでありがとうございます! 見たことのない表記が多いですが、一つずつ調べてやってみたいと思います!
guest

0

ファイルを書き換える、ということはできないと思っておきましょう。
するなら、

・ファイルの内容を全読み出しし、修正後、全書き込みなおす
・別のファイル名で修正後のデータを保存し、その後ファイル名のリネームなどを行って書き換えたように見せる

のいずれかでどうぞ

投稿2019/01/06 04:24

y_waiwai

総合スコア87747

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

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

sususu

2019/01/06 04:35

全書き込み直ししかできないのですね。 ありがとうございます。 全書き込み直しのロジックを調べてみたいと思います。 ありがとうございました。
guest

0

Pythonなど不要。そう、シェル芸ならね!

bash

1$ cat testconfig.ini|sed '/^[suzuki]/{n;s/kanagawa/osaka/;}' 2[sato] 3address = tokyo 4 5[suzuki] 6address = osaka 7 8[ito] 9address = saitama

投稿2019/01/06 03:58

hichon

総合スコア5737

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

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

sususu

2019/01/06 04:41

ご回答ありがとうございます。 shellについてもまだまだ勉強不足なので調べてみたいと思います。 今回作成しているのプログラムでpythonでスクレイピングしてきた値を引数としてこちらのtestconfig.pyに渡してそれを元にファイルを書き換えようとしています。 今回でいうとsuzukiとosakaを別のpythonのファイルから引数で受け取ってそれを元に書き換えようとしているのですが、pythonでやるのは難しいでしょうか? 質問が多くなってしまって申し訳ございませんが回答していただけると幸いです。よろしくお願いいたします。
hichon

2019/01/06 05:08

プログラム言語には向き不向きというのがあります。テキストファイルを簡単なルールに従って変換するというのはShell Scriptの得意とするところです。他の方の回答の様にPythonでも可能ですが、一行でスッキリと言うわけには行きません。
sususu

2019/01/06 06:35

ご回答ありがとうございます。 得意不得意がまだ把握できておらず失礼いたしました。 そこらへんも踏まえて勉強いたします。 shell scriptはあまり触ったことがなかったので調べてみたいと思います。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問