087930 ランダム
 ホーム | 日記 | プロフィール 【フォローする】 【ログイン】

金魚とPythonと楽天生活 o。.(∵ )∋ )3

PR

X

プロフィール


○。.(∵ )∋)3

カテゴリ

サイド自由欄

2018年12月15日
XML
カテゴリ:Python
​​​​​​
今回、必要に駆られて、すっごい久しぶりにPythonプログラムを自作してみた。

文字置換してますか?

デスクワークしていると、ExcelやAccessファイル中のデータの一部を置換するときありますよね。

ExcelやAccessで置換するときは、置換前の文字置換後の文字を入力して、置換したい範囲(Excelならセル、Accessならフィールド)を指定して一括置換するかと思います。

リストを一度に置換したい!

ExcelやAccessの置換メニューでは、一度に一つの文字しか置換できない。
VBAとか使えば色んな文字を一度に置換できるけれども、今回自分がやりたかったのが​『テキストファイル中のリストを一括置換』​​すること。​

例えば、こんなリストデータのあるテキストファイルがあったとする。
<prelist.txt>


それを、自作の辞書を参照して一括置換したかった。A列がキー、B列が値になる。
<dict_list.csv>


最終的にこんな感じに一括置換。
<result.txt>


意識して自作した点は以下の2点。
  • grapeとgrapefruitを区別できること
  • 辞書にないリスト(上の例だとdorian)はエラーせずにそのまま返す

実際のプログラム

【環境】Windows10、Python3.6.2
【準備】同一フォルダに<replace.py><prelist.txt><dict_list.csv>を格納しておくこと

<replace.py>

import csv
import codecs

f = open('dict_list.csv')
d = dict(filter(None, csv.reader(f)))#dict_list.csvを辞書に変換

t = open('prelist.txt')
t_list = t.read().split('\n')#prelist.txtをリストに変換

for key in t_list:
  if key in d:​#もしリストと同じキーが辞書にあるなら​
    removed_value = d.pop(key)​#値だけ抽出する​
    print(removed_value, file = codecs.open('result.txt','a'))
  else:#ないなら
    print(key, file = codecs.open('result.txt','a'))​#辞書外のリストはそのまま​

f.close()
t.close()

​​​

注釈部分を解説

#dict_list.csvを辞書に変換
開いたdict_list.csvを、A列をキー、B列を値として辞書を作成。内部ではこうなっている。
{'apple': 'りんご', 'orange': 'オレンジ', 'grape': 'ぶどう', 'grapefruit': 'グレープフルーツ', 'banana': 'バナナ'}

#prelist.txtをリストに変換
開いたprelist.txtを、改行(\n)を分割部分にしてリスト化。内部ではこうなっている。
['apple', 'orange', 'grape', 'grapefruit', 'banana', 'dorian']

#値だけ抽出する​
for文でリストを辞書に投げて、該当するキーがあればその値を返す。
実は最初、辞書にアクセスしようと[]を使って以下のように書いていた。

print([d[key]], file = codecs.open('result.txt','a'))

でも、こう書いてしまうとresult.txtで余分な['']が両端に発生してしまい、両端をスライスしようとしても['']の中がスライスされてしまい上手くいかなかった。

<失敗した出力ファイル>

そのため、popメソッドで値だけを抽出した。

#辞書外のリストはそのまま
else文がないと、辞書にないリストを要求したときにKeyErrorを出して止まってしまう。
今回はリストをそのまま返したかったので、上記のように書いた。

さいごに

上記プログラムを実行すると、同一フォルダに置換された<result.txt>が作成される。

あくまで自分用に作ったプログラムなので、連続で実行すると<result.txt>にどんどん追記していってしまうとか作りは甘いけど、やりたかった動きが出来たので大満足。

そもそも今回これを作ったのは、似たようなテキストファイル(リスト100個くらい入ってる)を置換する必要があったから。手作業で数ファイルやっている内に「あ~、これ別のファイルで置換したなぁ」と面倒になった。

これで面倒から解放~!( ^ω^)・・・後は辞書作るだけだなぁ(白目)。

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

初めてのPython第3版 [ マーク・ルッツ ]
価格:4968円(税込、送料無料) (2018/12/15時点)

楽天で購入


にほんブログ村 IT技術ブログ Pythonへ
にほんブログ村


​​​​​​​​​​​​






最終更新日  2018年12月16日 08時30分12秒
コメント(0) | コメントを書く



© Rakuten Group, Inc.