Pythonで辞書翻訳
解決したいこと
Pythonでcsv辞書を使った置換(翻訳)のようなアプリをつくっています。
boy,男の子
のような単語のペアを羅列したcsv辞書を作り、それに基づき単語を置換していくだけのアプリです。
置換対象となるキーワードを見つけて1行づつ処理しています。
下のコードでは単純化のため、辞書の読み込みや辞書に基づく処理を消しています。
with open('sample.xml', 'r', encoding='UTF-8') as f:
for line in f:
if 'name=' in line:
line = line.replace('boy', '男の子')
print(line) # (1)
print(f) # (2)
data = f.read()
print(data) #(3)
上記コードで (1) の箇所では置換されていることが確認できるのですが、(2)のところでは
<_io.TextIOWrapper name='sample.xml' mode='r' encoding='UTF-8'>
と、なります。そこで、f.read()としたのですが、(3)では何も出力されません。
どなたかご教示いただければ幸いです。
自分で試したこと
最初はファイルをopenした直後に、data = f.read() して一括置換したのですが、意図しない箇所もマッチ、置換されてしまうため、1行ごとに置換対象行かどうか判断をするようにしました。
1行ごとの処理に関しては
https://qiita.com/niikura/items/8c792ba56877dfd5a31a
を参考にさせていただきました。
最初に f.read()する方法では以下コードを試しました。
with open('sample.xml', 'r', encoding='UTF-8') as f:
data = f.read()
for line in data.split('\n'):
if 'name=' in line:
line = line.replace('boy', '男の子')
print(line) # (1)
print(data) #(2)
このコードでは、(1)のところでは置換を確認できるのですが、(2)のところでは置換が反映されていません。
1行ごとに line で処理したものが、元の data に反映されていないようです。
こちらも理解が及びませんでした。
正規表現を使った re.sub() も試しました。
こちらは一応望んだ結果が得られたのですが、辞書の内容と完全一致しないと置換されず、"赤い帽子"を、”赤い"、"帽子"の2回に分けて置換することができず、辞書の整備が大変であることがわかりました。
ですので、str.replace() で処理したいと考えています。
よろしくお願いいたします。