🍩
Pythonコードを自動フォーマットしたい(autopep8)
概要
汚いpythonコードをautopep8を使ってきれいなコードに直しました。
環境
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.15.6
BuildVersion: 19G2021
$ python3 --version
Python 3.7.3
インストール
$ pip3 install autopep8
### こちらもあると嬉しい
$ pip3 install flake8
使い方
autopep8はPEP8スタイルに準拠するようにコードフォーマットをしてくれます。
-dで現在のコードとの差分が見れます。
今回はslackに投稿するコード(autopep8test.py)を修正してみました。
### -d, --diff: print the diff for the fixed source
$ autopep8 --diff autopep8test.py
変更後のコードに問題がなく適応する場合は
### -i, --in-place: make changes to files in place
$ autopep8 --in-place autopep8test.py
### もしくは
$ autopep8 autopep8test.py > newfile.py
結果は
元のコード
$ cat autopep8test.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import requests, json
def post(bot_name:str, msg:str) -> int:
CHANNEL = '<<CHANNEL>>'; TOKEN = '<<TOKEN>>'
URL = 'https://slack.com/api/chat.postMessage'
headers = { 'Content-Type': 'application/json' }
data = {
'channel': CHANNEL, 'token': TOKEN,
'username': bot_name, 'text': msg
}
requests.post(url=URL, headers=headers, data=json.dumps(data))
post('mybot', 'hello')
diff
$ autopep8 --diff autopep8test.py
--- original/autopep8test.py
+++ fixed/autopep8test.py
@@ -1,15 +1,20 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
-import requests, json
-def post(bot_name:str, msg:str) -> int:
- CHANNEL = '<<CHANNEL>>'; TOKEN = '<<TOKEN>>'
+import requests
+import json
+
+
+def post(bot_name: str, msg: str) -> int:
+ CHANNEL = '<<CHANNEL>>'
+ TOKEN = '<<TOKEN>>'
URL = 'https://slack.com/api/chat.postMessage'
- headers = { 'Content-Type': 'application/json' }
+ headers = {'Content-Type': 'application/json'}
data = {
- 'channel': CHANNEL, 'token': TOKEN,
+ 'channel': CHANNEL, 'token': TOKEN,
'username': bot_name, 'text': msg
- }
+ }
requests.post(url=URL, headers=headers, data=json.dumps(data))
+
post('mybot', 'hello')
完成したコード
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import requests
import json
def post(bot_name: str, msg: str) -> int:
CHANNEL = '<<CHANNEL>>'
TOKEN = '<<TOKEN>>'
URL = 'https://slack.com/api/chat.postMessage'
headers = {'Content-Type': 'application/json'}
data = {
'channel': CHANNEL, 'token': TOKEN,
'username': bot_name, 'text': msg
}
requests.post(url=URL, headers=headers, data=json.dumps(data))
post('mybot', 'hello')
対応した問題点
$ flake8 autopep8test.py
autopep8test.py:3:16: E401 multiple imports on one line
autopep8test.py:4:1: E302 expected 2 blank lines, found 0
autopep8test.py:4:18: E231 missing whitespace after ':'
autopep8test.py:4:27: E231 missing whitespace after ':'
autopep8test.py:5:28: E702 multiple statements on one line (semicolon)
autopep8test.py:8:16: E201 whitespace after '{'
autopep8test.py:8:51: E202 whitespace before '}'
autopep8test.py:11:9: E131 continuation line unaligned for hanging indent
autopep8test.py:15:1: E305 expected 2 blank lines after class or function definition, found 1
↓
$ flake8 autopep8test.py
### 出力なし
diffとflake8で確認しながらすすめると安心ですね!
Discussion