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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

2回答

469閲覧

pythonで行頭に「リスト内にある都道府県名」がある行に追記し、新しいテキストファイル(test-new.txt)を作りたい

oyatsu8

総合スコア97

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

0クリップ

投稿2023/03/16 08:23

編集2023/03/16 08:50

実現したいこと

  • 行頭に「リスト内にある都道府県名」がある行に追記し、新しいテキストファイル(test-new.txt)を作りたい

前提

テキストファイルを読み込み、行頭に都道府県名があった場合に、その行を「都道府県:都道府県名」と書き直し、行頭に都道府県名がない場合はそのまま元の行を書き込んで新しいファイルを作りたい

発生している問題

pythonや正規表現の初学者で、該当のソースコードでは二重に繰り返してしまうのですが、どうしても出来ず助言をいただけたら幸いです。

該当のソースコード

python3

1import re 2import sys 3 4pref_list = ['北海道','青森県','岩手県','宮城県','秋田県','山形県','福島県','茨城県','栃木県','群馬県','埼玉県','千葉県','東京都','神奈川県','新潟県','富山県','石川県','福井県','山梨県','長野県','岐阜県','静岡県','愛知県','三重県','滋賀県','京都府','大阪府','兵庫県','奈良県','和歌山県','鳥取県','島根県','岡山県','広島県','山口県','徳島県','香川県','愛媛県','高知県','福岡県','佐賀県','長崎県','熊本県','大分県','宮崎県','鹿児島県','沖縄県'] 5 6linechange = "" 7f = open("test.txt", 'r',encoding="utf-8") 8 9new_file_name = "test-new.txt" 10 11outfile = open(new_file_name, "w") 12 13 14for line in f: 15 for pref in pref_list: 16 #行頭にpref_listの県があった場合はlinechangeを書き込む 17 if "r'^"+ pref +"'" in line: 18 linechange = "都道府県:"+pref 19 outfile.write(linechange) 20 21 #行頭にpref_listの県がなかった場合はそのままlineを書き込む 22 else: 23 #print("行頭"+pref+"ない") 24 outfile.write(line) 25 26f.close() 27outfile.close() 28

test.txt

1あいうえお 2かきくけこ 3青森県 4 5サシスセソ 6たちつてと青森県 7なにぬね青森県の

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

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

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

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

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

guest

回答2

0

元のコードを生かすなら以下のような感じでできます。

Python

1for line in f: 2 for pref in pref_list: 3 if line.find(pref) == 0: # 先頭が都道府県名か 4 line = "都道府県:"+ line # 先頭に足し込む 5 break # 見つかったので抜ける 6 outfile.write(line) 7 8""" 9北海道,バター 10りんご 11新潟県,米 12""" 13""" 14都道府県:北海道,バター 15りんご 16都道府県:新潟県,米 17"""

投稿2023/03/16 08:43

can110

総合スコア38256

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

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

oyatsu8

2023/03/16 09:09

ありがとうございます。break # 見つかったので抜ける方法が思いつきませんでした。 参考にさせていただきます。
guest

0

ベストアンサー

python

1import re 2 3pref_list = ['北海道','青森県','岩手県','宮城県','秋田県','山形県','福島県','茨城県','栃木県','群馬県','埼玉県','千葉県','東京都','神奈川県','新潟県','富山県','石川県','福井県','山梨県','長野県','岐阜県','静岡県','愛知県','三重県','滋賀県','京都府','大阪府','兵庫県','奈良県','和歌山県','鳥取県','島根県','岡山県','広島県','山口県','徳島県','香川県','愛媛県','高知県','福岡県','佐賀県','長崎県','熊本県','大分県','宮崎県','鹿児島県','沖縄県'] 4prefs = '|'.join(pref_list) 5 6file_name = 'test.txt' 7new_file_name = 'test-new.txt' 8with open(file_name, 'r', encoding='utf-8') as fin, \ 9 open(new_file_name, 'w') as fout: 10 for line in fin: 11 if re.match(prefs, line): 12 line = '都道府県:' + line 13 fout.write(line)

投稿2023/03/16 08:40

melian

総合スコア19703

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

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

oyatsu8

2023/03/16 09:01

大変ありがとうございます。やりたいことができました。pythonも正規表現もまだよくわかっていないため、勉強を進めようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問