BETA

pythonコードを自動フォーマットしたい(autopep8)

投稿日:2020-08-28
最終更新:2020-08-28

概要

汚いpythonコードをautopep8を使ってきれいなコードに直しました。

環境

$ sw_vers  
ProductName:    Mac OS X  
ProductVersion:    10.15.6  
BuildVersion:    19G2021  

$ python3 --version  
Python 3.7.3  

インストール

$ pip3 install autopep8  

使い方

autopep8はPEP8スタイルに準拠するようにコードフォーマットをしてくれます。
-dで現在のコードとの差分が見れます。
今回はslackに投稿するコードを修正してみました。

### -d, --diff: print the diff for the fixed source  
$ autopep8 --diff slack.py  

変更後のコードに問題がなく適応する場合は

### -i, --in-place: make changes to files in place  
$ autopep8 --in-place slack.py  
### もしくは  
$ autopep8 slack.py > newfile.py  

結果は

元のコード

$ cat slack.py  
#!/usr/bin/env python3  
# -*- coding: utf-8 -*-  
# vim: set expandtab shiftwidth=4 softtabstop=0 tabstop=4:  
#  
# slack utility  

import requests  
from urllib3.util.retry import Retry  
from requests.adapters import HTTPAdapter  
import json  


def post(bot_name: str, msg: str) -> int:  
    CHANNEL = '<<CHANNEL>>'  
    TOKEN = '<<TOKEN>>'  
    URL = 'https://slack.com/api/chat.postMessage'  

    s = requests.Session()  
    retries = Retry(total=5, backoff_factor=1, status=200)  
    s.mount('https://',HTTPAdapter(max_resties=retries))  
    s.mount('http://', HTTPAdapter(max_resties=retries))  

    headers = {  
        'Content-Type': 'application/json'  
    }  
    data = json.dumps({  
        'channel': CHANNEL,  
        'token': TOKEN,  
        'username': bot_name,  
        'text': msg  
    })  
    res = s.post(url=URL, headers=headers, data=data)  

    if res.status_code != 200:  
        raise Exception(res.text)  

    return res.status_code  


def main():  
    exit(0)  


if __name__ == '__main__':  
    main()  

diff

$ autopep8 --diff slack.py  
--- original/slack.py  
+++ fixed/slack.py  
@@ -16,7 +16,7 @@  

     s = requests.Session()  
     retries = Retry(total=5, backoff_factor=1, status=200)  
-    s.mount('https://',HTTPAdapter(max_resties=retries))  
+    s.mount('https://', HTTPAdapter(max_resties=retries))  
     s.mount('http://', HTTPAdapter(max_resties=retries))  

     headers = {  
@@ -41,4 +41,3 @@  

 if __name__ == '__main__':  
     main()  
-  

完成したコード

$ autopep8 --in-place slack.py  
$ cat slack.py  
#!/usr/bin/env python3  
# -*- coding: utf-8 -*-  
# vim: set expandtab shiftwidth=4 softtabstop=0 tabstop=4:  
#  
# slack utility  

import requests  
from urllib3.util.retry import Retry  
from requests.adapters import HTTPAdapter  
import json  


def post(bot_name: str, msg: str) -> int:  
    CHANNEL = '<<CHANNEL>>'  
    TOKEN = '<<TOKEN>>'  
    URL = 'https://slack.com/api/chat.postMessage'  

    s = requests.Session()  
    retries = Retry(total=5, backoff_factor=1, status=200)  
    s.mount('https://', HTTPAdapter(max_resties=retries))  
    s.mount('http://', HTTPAdapter(max_resties=retries))  

    headers = {  
        'Content-Type': 'application/json'  
    }  
    data = json.dumps({  
        'channel': CHANNEL,  
        'token': TOKEN,  
        'username': bot_name,  
        'text': msg  
    })  
    res = s.post(url=URL, headers=headers, data=data)  

    if res.status_code != 200:  
        raise Exception(res.text)  

    return res.status_code  


def main():  
    exit(0)  


if __name__ == '__main__':  
    main()  

対応した問題点

$ flake8 slack.py  
slack.py:19:23: E231 missing whitespace after ','  
slack.py:44:1: W391 blank line at end of file  

↓  

$ flake8 slack.py  
### 出力なし  
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@yachiの技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう