Python

【Python】テキストファイルの特定の文字の前後の文字列を入れ替える

こんにちは。まれーどです。

C#でやったやつをPythonの練習がてら作ってみた。

C#で作ったやつ

使い方

config.iniファイルを開きます。
splitCharの値には、前後入れ替えする基準の文字を設定します。1文字だけかと思ったら2文字以上でも大丈夫そうでした。
lastCharの値は、最後の文字が変わってほしくない場合は設定してください。C#の処理の最後には、セミコロンが必要だったので項目を入れておきました。不要だったら何も設定しなくて大丈夫です。

ソース(解説する気のない解説)

コンフィグの読み込みを行う
# コンフィグファイルから読み込み
config = configparser.ConfigParser()
config.read('config.ini', encoding='utf-8')

splitchar = config['DEFAULT']['splitChar']
lastchar = config['DEFAULT']['lastChar']

今回はconfigparserを使用してコンフィグファイルの読み込みを行いました。configの一つ目の[]の内容を変更することで、色んなタグ?の設定を読み込めると。考えるのめんどかったからDEFAULTにしたけど。

ファイルパス読み込みからファイルオープン
# ファイルパスを入力
filepath = input()

# 書き込み用配列
lswrite = []

# ファイルオープン
with open(filepath, 'r') as f:
    # ファイルの行数分処理する
    for readitem in f:
        temp = readitem.strip().strip(lastchar).split(splitchar)
        # 分割数が2出ない場合は次の行を読み込む
        if len(temp) != 2:
            continue
        lswrite.append(temp[1] + splitchar + temp[0] + lastchar +'\n')

ターミナルの入力を受け付けるのはinput()を使う。
ファイルオープンにwithを使うとcloseのし忘れがなくスマートに書ける。C#でいうusingかな。
openの第2引数を’r’で読み取りで開いてる。
読み込んだテキストが改行コードを含んでるので、strip()で空白、改行コードを削除。
今回は「;」を削除したかったから、設定ファイルで削除できるようにstrip()した。
末尾のみ削除でいいからrstrip()を使えば良かったかも。
splitで分割して、入れ替えてリストに追加。

ファイルパス書き込み
# 書き込むデータが存在すれば処理する
if len(lswrite) > 0:
    with open(filepath, 'w') as wr:
        for writeitem in lswrite:
            wr.write(writeitem)

lenで要素が含まれてたら書き込みするか判定する。
openの第2引数を’w’で書き込みモードというか上書きモードで開く。同じファイルに追加するなら’a’を指定すると良い。
あとは要素の数だけ処理して終わり。

最後に

1年ぶりくらいにPythonのコードを書いた気がする。意外と覚えてることがあったけど、書かなきゃ鈍るなって思った。今後も練習がてら色々と作っていきます。今回はほぼ備忘みたいな感じだった。なんかの参考になれば。

参考

設定ファイルの読み込み
https://kodocode.net/python-begin-settings/
先頭と末尾から文字列を削除する

https://uxmilk.jp/12804

ファイルの読み書き
https://atmarkit.itmedia.co.jp/ait/articles/2104/16/news022.html