Pythonで、正規表現を使って特定条件だけZIPファイルに追加したい
前提・実現したいこと
pythonで指定ディレクトリの中からファイルを選んでZIPファイルに格納したい
発生している問題
image_1.jpg
image_2.jpg
image_3.jpg'
image-cv01.jpg
image-cv21.jpg
image-cv31.jpg
image.jpg
image_100.jpg
例として、上記のようなファイルリストがあったとします。
数字の部分は決まった形式なので変わることはありませんが、数字の最大値は状況により変わります。
これから
image_3.jpg'
image-cv01.jpg
image-cv21.jpg
image-cv31.jpg
を格納したsyoko.zipを作成するのが希望動作です。
つまり、image_[数字一桁]なら最大値のファイルのみ、image-cv[数字二桁]なら全ファイルを追加。imageだけで何もないファイルや、_[数字三桁]などは圧縮ファイルへ追加しないという動作になります。
該当のソースコード
Python
1 2wodir = '上記のファイルが格納されたフォルダを指定' 3files = [] 4 5#直下のファイル一覧取得 6 for x in os.listdir(wodir): 7 if os.path.isfile(wodir + x): 8 files.append(x) 9 10 11 compFile01 = zipfile.ZipFile(syoko.zip', 'w', zipfile.ZIP_DEFLATED) 12 for y in files: 13 pattern = 'image' + r"_[0-9]{1}.jpg" 14 matchOB = re.match(pattern, y) 15 if matchOB: # ファイル名がパターンとマッチしたら追加 16 compFile01.write(y) 17 18 pattern = 'image' + r"-cv[0-9]{2}.jpg" 19 matchOB = re.match(pattern, y) 20 if matchOB: # ファイル名がパターンとマッチしたら追加 21 compFile02.write(y) 22 23 compFile01.close() 24
結果、出来上がったsyoko.zipは、
image_1.jpg
image_2.jpg
image_3.jpg'
image-cv01.jpg
image-cv21.jpg
image-cv31.jpg
のようにimage_[数字1文字]のファイルを全部ひっかけてしまいます。
いろいろGoogleなどで調べてみたのですが、数字一桁の最も大きいものだけを抽出する方法が見つけられません。
あるいは、pythonでzipから指定したファイルを削除できれば、とも思ったのですが、上記コードで最大値を確保する方法や、圧縮ファイルからファイルを除去する方法も見つけられずにおります。
よろしくお願いします。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/05 06:20