Python基本編

Python情報

カテゴリータイトルlink
Python 基本Pythonの開発環境を用意しよう!(Windows)link
Python 基本とほほのPython入門link
Python 基本から応用Python の入門から応用までをサポートする学習サイトlink
Python 3.8.4 ドキュメント(機械翻訳)link

pythonのコードの中から興味のあるものをテストしてみたので実例をメモしておく。

listの中から特定の条件の行を抜き出す。


p = ['ピカソの作は殆ど白1色の生地の上に黒い線で輪郭のみを描いた油彩作品で、','彼としては非常に珍しい。','添付1:リール美術館正面','添付2:リール美術館1階内部']
print (*p, sep='\n')

 ピカソの作は殆ど白1色の生地の上に黒い線で輪郭のみを描いた油彩作品で、
 彼としては非常に珍しい。
 添付1:リール美術館正面
 添付2:リール美術館1階内部

l = [p for p in p if '添付' in p and ':' in p]
print(l)
  
  ['添付1:リール美術館正面', '添付2:リール美術館1階内部']
  
print (*l, sep='\n')
  
 添付1:リール美術館正面
 添付2:リール美術館1階内部
   

  • 変数 p は4行の文字列を含んだlist(配列) 。' 'で囲まれ , (カンマ)で区切られる
  • 変数の中身を確かめるためにprint関数で表示。print関数のカッコ中の変数の前の '*' は '[' などを省略する。 sep='\n'は1行ずつ改行して出力
  • この色の文字はprintで出力された結果を張り付けたもの
  • l = [p for p in p if '添付' in p and ':' in p] がpが何度も出てきて分かりにくいが最初の p の文字列のlistから '添付' と ':' を含んでいる行を抜き出す
  • 変数 l をprint。添付 : を含んだ行が抜き出された。

文字列の中の数字に1を足す。

文字の操作には文字列の取り扱いで大変便利な正規表現を使う。import reでモジュールを呼び出す。

正規表現とは仰々しい言葉だが、Regular Expressionの日本語訳からという。他の分野で訳された言葉をそのまま使っているらしい。
参考): 正規表現操作

美術館訪問記 -443  リール美術館という文字列の443を次の訪問記番号444に変えたい。タイトルなので他に数字は使われない。


import re
t = '美術館訪問記 -443  リール美術館'
n = re.sub("\\D", "", t)
print(type(n))
  
 <class 'str'>   
  
print(n)
  
 443
   
m = int(n) + 1
t = t.replace(n,str(m))  
t = t.replace('-','- ')          - と番号の間を空ける 
print(n)
  
 美術館訪問記 - 444  リール美術館
  

  • re. は正規表現
  • sub関数: 別の文字列に変える
  • \D:0-9の数字以外, \d:0-9の数字
  • re.sub("\\D", "", t)は数字以外の文字を削除
  • \は特殊文字なので重ねる(エスケープシーケンス)(実際は一個でも出来たがこういうものはルールに従っておいたほうがよい)
  • replaceの引数はstrでなくてはいけない。

画像ファイル名を並べ替える

メールに添付される画像ファイルは 2020 7 3 1.jpg , 2020 7 3 2.jpg , .....のように名前が付けられており、多くても12個程度。メール本文中に 添付1:リール美術館正面 などと説明が書かれている。

一度メールからfolderにダウンロードした画像ファイル名を関数os.listdir()を使って取得すると文字列でソートされるため2020 7 3 1.jpg の次に2020 7 3 10.jpg が来る。

普通にlist要素を並べ替えるsorted()関数を使うと同じく1の次に10が来てその次に2が来る。

桁数を合わせるとか色々考えたが単純に一つずつ突き合わせてlist要素に張り付けた。


# file sort
ms = ['2020 07 03 1.jpg','2020 07 03 10.jpg','2020 07 03 3.jpg','2020 07 03 2.jpg','2020 07 03 4.jpg','2020 07 03 5.jpg','2020 07 03 9.jpg','2020 07 03 7.jpg','2020 07 03 12.jpg','2020 07 03 6.jpg','2020 07 03 8.jpg','2020 07 03 11.jpg']
print(*ms,sep='\n')
  
   2020 07 03 1.jpg
   2020 07 03 10.jpg
   2020 07 03 3.jpg
   2020 07 03 2.jpg
   2020 07 03 4.jpg
   2020 07 03 5.jpg
   2020 07 03 9.jpg
   2020 07 03 7.jpg
   2020 07 03 12.jpg
   2020 07 03 6.jpg
   2020 07 03 8.jpg
   2020 07 03 11.jpg 
print(type(ms))
  
   <class 'list'>
ct = len(ms)
print(ct)
  
  12
mso = []
j = 1
while j <= ct:
         cc = str(j) + '.jpg'   # cc = 1.jpg
         for i in ms:     # i = 2020 7 3 1.jpg
           if cc in i :      # 1.jpg in  2020 7 3 1.jpg
              mso.insert(j,i) 
              break
         j += 1
print(*mso,sep='\n')
  
   2020 07 03 1.jpg
   2020 07 03 2.jpg
   2020 07 03 3.jpg
   2020 07 03 4.jpg
   2020 07 03 5.jpg
   2020 07 03 6.jpg
   2020 07 03 7.jpg
   2020 07 03 8.jpg
   2020 07 03 9.jpg
   2020 07 03 10.jpg
   2020 07 03 11.jpg
   2020 07 03 12.jpg

後でnatsorted()という関数があることを知った。

pip install natsort # install natsort


# file sort natural
from natsort import natsorted
ms = ['2020 07 03 1.jpg','2020 07 03 10.jpg','2020 07 03 3.jpg','2020 07 03 2.jpg','2020 07 03 4.jpg','2020 07 03 5.jpg','2020 07 03 9.jpg','2020 07 03 7.jpg','2020 07 03 8.jpg','2020 07 03 6.jpg','2020 07 03 11.jpg','2020 07 03 12.jpg']
ms = natsorted(ms)  # 
print(*ms,sep='\n')
  
   2020 07 03 1.jpg
   2020 07 03 2.jpg
   2020 07 03 3.jpg
   2020 07 03 4.jpg
   2020 07 03 5.jpg
   2020 07 03 6.jpg
   2020 07 03 7.jpg
   2020 07 03 8.jpg
   2020 07 03 9.jpg
   2020 07 03 10.jpg
   2020 07 03 11.jpg
   2020 07 03 12.jpg



戻る

Total Today Yesterday