PEP8に従うようにコードを整形してみた
以前書いたCSVをJSONに変換するプログラムをPEP8に従うように書きなおしてみました。
昨日のエントリで書いた部分を一通り書きなおした後、その名もpep8という、コードが正しくPEP8に従っているかを確認してくれるツールを使って調べてみました。
そうすると直したはずなのに間違いの指摘が出るわ出るわ(^_^;)
なかでも一番多かったのが"blank line contains whitespace"、すなわち何も書いていない行に空白が入っているという警告です。
eclipseを普通に使っていると次のようなインデントされたブロック内で空行を入れた際、何もない行にインデント分の空白が入りますがそれもダメなようです。
for i, v in enumerate(eachPart): eachDict[i] = OrderedDict() #こういうところ if len(keyList) != len(eachPart[i]): print "Item #" + str(i) + " length adjust"
この空白はあったほうがむしろブロックが分かりやすいんじゃ・・・といいたくなる気持ちを抑えて警告がでなくなるまで修正した結果がこちら。
# coding: shift_jis #CSVを読み込んでJSON化する import sys import json import codecs from collections import OrderedDict if sys.argv[1].endswith(".csv"): csvFileName = sys.argv[1] else: csvFileName = sys.argv[1] + ".csv" #読み出しで開く csvFile = open(csvFileName, 'r') #行のリストを作成 eachLine = [] for line in csvFile: eachLine.append(line.replace("\n", "") .replace('\"', '') .replace("\'", "")) csvFile.close() eachPart = [""] * len(eachLine) #各行をカンマで分割 for i, v in enumerate(eachLine): eachPart[i] = v.split(',') #キーのリスト keyList = eachPart.pop(0) #dictのリストを作る eachDict = [""] * len(eachPart) for i, v in enumerate(eachPart): eachDict[i] = OrderedDict() if len(keyList) != len(eachPart[i]): print "Item #" + str(i) + " length adjust" #キーの長さより要素数が少ない場合は""で埋める if len(keyList) > len(eachPart[i]): gap = len(keyList) - len(eachPart[i]) eachPart[i].extend(gap * [""]) for j, vj in enumerate(keyList): eachDict[i][vj] = unicode((eachPart[i][j]), "shift_jis") #書きこむファイル作製 jsonFileName = csvFileName.replace('.csv', '.json') jsonFile = codecs.open(jsonFileName, "w", "utf-8") #JSON出力 json.dump(eachDict, jsonFile, ensure_ascii=False) jsonFile.close()
さすがにコメントが英語でないことは警告しないようです。