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

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

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

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python

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

Q&A

解決済

1回答

3454閲覧

Python2.7におけるiniファイルの一部書き換え方法についてご教示ください

Yoichinn

総合スコア16

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python

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

0グッド

0クリップ

投稿2018/12/04 02:10

Python2.7にてiniファイルの内容書き換えを行いたいと考えております。

具体的には、iniファイル内のtestmodeの値を
0を1
または
1を0
に書き換えを行いたいのです。

現状、書き換えには成功しています。
しかし、iniファイル内の改行およびコメントが欠損してしまい
元の形から変わってしまいます。
これを元の形を維持したまま、書き換えを行うようにしたいと考えています。

(起こっている事象)
■元のiniファイルの中身

text

1#テストモード判定 20なら本番、1ならテスト 3[testmode] 4test_mode:0 5 6##何台目のPCなのかを判定 7[pc_number] 8pc_num : 1 9・・・・

上記が以下のように表示されるように変更

■変更後のiniファイルの中身

text

1[testmode]test_mode = 1[pc_number]pc_num = 0・・・

iniファイルは管理者以外も触る必要があるため、元の形状を保持した状態で書き換えをしたいと考えております。
また、iniファイルを2つ準備し、切替させることも考えましたが、頻繁にiniファイルの書き換えが発生するため、管理上、切替をしないようにしたいと考えております。

該当のソースコード

※python2.7

Python

1path3 = os.path.abspath(u"C:\Python\INI\settting.ini") 2inifile = ConfigParser.SafeConfigParser() 3inifile.read(path3) 4 5#aの値は別途持ってくるようにしてあります 6if a == u"テストモード": 7 inifile.set("testmode", "test_mode", "1") 8 with open(path3,'wb') as f: 9 inifile.write(f) 10elif a == u"本番モード": 11 inifile.set("testmode", "test_mode", "0") 12 with open(path3,'wb') as f: 13 inifile.write(f) 14else: 15 inifile.set("testmode", "test_mode", "1") 16 with open(path3,'wb') as f: 17 inifile.write(f)

わかりづらい点もあるかと思いますが、アドバイスいただけますでしょうか。
宜しくお願いいたします。

※上記コードの参考URL
https://symfoware.blog.fc2.com/blog-entry-1589.html

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

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

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

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

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

guest

回答1

0

ベストアンサー

動作未検証ですがUpdate INI file without removing comments
によるとConfigObjを使うと、コメントを残して.iniの編集ができるようです。

投稿2018/12/04 02:19

can110

総合スコア38233

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

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

Yoichinn

2018/12/04 04:44

ご回答頂きありがとうございます。 早速試してみました。 そうしたところiniファイルの読み込み時にエラーが発生いたしました。 ※iniファイル内の「:」の記述を「=」に変更してみましたが、エラー発生している行数が6行目から80行目に変更となりました 解消方法がわかるようでしたらご教示いただけませんでしょうか。 お手数おかけして申し訳ありません。 #エラー内容: '''text Traceback (most recent call last): File "start.py", line 105, in <module> config = ConfigObj(path3) File "C:\Python27\lib\site-packages\configobj.py", line 1229, in __init__ self._load(infile, configspec) File "C:\Python27\lib\site-packages\configobj.py", line 1318, in _load raise error configobj.ConfigObjError: Parsing failed with several errors. First error at line 80. ''' 以下が、修正したコードです '''python path3 = os.path.abspath(u"C:\Python\INI\settting.ini") config = ConfigObj(path3) #aの値は別途持ってくるようにしてあります if a == u"テストモード": config['testmode']['test_mode'] = '1' config.write() elif a == u"本番モード": config['testmode']['test_mode'] = '0' config.write() else: config['testmode']['test_mode'] = '1' config.write() '''
can110

2018/12/04 04:52

動作未検証ですが.iniの80行目付近を提示されると回答得られやすいかと思います。
Yoichinn

2018/12/04 05:06

ご確認頂きありがとうございます。 iniファイルの内容を76行目から記載いたします。 ※個別のメールアドレスが含まれているためイメージでの記載となります。 iniの80行目に関してはgmail2のGmail_bccの値が格納されている部分となります。 76行目~ #地域A [gmail2] Gmail_to = Gmail_cc = Gmail_bcc = メールアドレスが40個ほどカンマ区切りで入っています #地域B [gmail3] Gmail_to = Gmail_cc = Gmail_bcc = a@gmail.com,b.gmail.com,・・・・,z@yahoo.co.jp 以下、同様に地域ごとの宛先をiniファイルに格納しております
Yoichinn

2018/12/04 05:19

can110さん ご指摘いただいた点を元に確認いたしました。 おっしゃるとおりiniファイルの80行目を詳細確認いたしました。 そうしたところ、カンマが2つ連なってある箇所があったためひとつに変更いたしました。 これにより、スクリプトが動くようになりました。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問