PythonでExcelの区切り文字を痴〇(置換)した話
本題
へへへ、すけべなセルしてるじゃねえか
はい、題名の通りExcelファイルの中身を置換してCSVで保存する作業をpythonで自動化(?)した話です。
やりたいこと
Excelの特定の範囲から該当の個所を置換⇒CSVにして保存させたい。
今まではExcelの範囲を指定⇒サクラエディタに貼り付け⇒置換を3回⇒CSVとして保存してました。
なぜサクラエディタに貼り付けているのか?
一度手でやっていた作業を見てみましょう。
はいここでF〇〇Kポイント1つ目、使用する場所はB列~E列、3行目から最終行(可変)です。
おいおい、なんだこのスケベな空欄とスケベな範囲は
範囲が変動(列は固定)なのはまあいいとして、これ空欄セルがあると読み込んだ時になぜかNoneで入ってくる時があるんですよね。そのせいで処理が少しめんどくなります。(後ほど説明)
じゃあ範囲を選択してコピー⇒サクラエディタに貼り付け、そして3回置換します。
1回目
2回目
3回目
完成したもの
はい、もうおわかりでしょうか。
そうです。(題に書いてる)
セルの文字ではなく区切り文字を置換しています。
おいおい、なんだこのスケry
やったこと
「python excel 置換」で検索すると文字を置換するのは普通に出てくるんですけど区切り文字置換がなかなか見つからないので苦戦しましたねぇ。
使うのはPythonのopenpyxl
というパッケージです。
そもそもこれには区切り文字を指定することのできるdelimiter
というものがあるのですが、delimiter
で指定できるのは1文字のみという制限があります。今回の場合は区切り文字を","
という3文字にしたいのでこれは使えませんでした。(使えないわけではないですが結局簡単にはいかない)
じゃあどうしたか、プログラムは以下です。
import openpyxl
#--------------------- excelファイル変換処理----------------------------
xlsx_file = r"C:\Users\user\Desktop\import\test.xlsx"
csv_file = "TEST.csv"
# エクセルブック
wb = openpyxl.load_workbook(xlsx_file, data_only=True)
# エクセルシート
ws = wb["Sheet1"]
for row in ws.iter_rows(min_row=3,min_col=2,max_col=5,values_only=True):
row = list(row)
row = ["" if x is None else x for x in row]
row = "\"" + "\",\"".join(map(str,row)) +"\"\r\n"
with open(csv_file,"a",newline="") as f:
f.write(row)
主な部分としては10行目以降ですね。
まず
for row in ws.iter_rows(min_row=3,min_col=2,max_col=5,values_only=True):
ここで読み込む範囲を指定します。rowに関してはスタート地点min_row
を指定、max_row
を記載しないことで記載があるところ(最終行)まで特定します。
列に関しては固定なのでmin_col
,max_col
を指定します。
最後のvalues_only=True
でセルの値を取ってくるよう指定します。
11行目で、値はtuple型で帰ってきますが処理しやすいようリスト型に変換します。
12行目
row = ["" if x is None else x for x in row]
前半で言いましたが空欄を読み込んだ時に時々None
で返される時がありました。そのままCSVで保存するとセルにNone
が入るのでここでNone
を空欄に変換してます。
13行目
row = "\"" + "\",\"".join(map(str,row)) +"\"\r\n"
はい
まず無理やり行の前後に"
をつけてます。
そして"\",\"".join(map(str,row))
ここでリストとして取得した1行の各値を","
を間に挟んで文字列とします。
例えば4行目だったら[S2346,Y,234,MT]
というリストを取得してS2346","Y","234","MT
という文字列を得る感じですね。
そして最後にCSVファイルに書き込んでいく、という処理を今回は作りました。
最後に
もうちょっときれいに作れたらよかったんですけど3文字の文字列ということで今回はこのような力業プログラムを作成しました。まあ実業務で作った奴はもうちょっと複雑なのですが、Excel変換につかれたエンジニアの手助けになればいいなと思います。
またQiitaの使い方になれていたいのですが、ここで作成したのはあくまで一例です。
これが正解ではないですし、もっといい方法があれば教えていただきたいです。
Author And Source
この問題について(PythonでExcelの区切り文字を痴〇(置換)した話), 我々は、より多くの情報をここで見つけました https://qiita.com/shiranon/items/ce0a43df82f0754f399f著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .