chap07/sample3.py

サンプルコードのダウンロード

 1#!/usr/bin/env python
 2# -*- coding: utf-8 -*-
 3
 4###
 5### カレントディレクトリのpythonソースの行数をそれぞれ表示する
 6###
 7
 8import os
 9import subprocess
10
11
12def count_py_lines1(dirname):
13    print('*** count_by_lines1')
14    # ファイルとディレクトリのリスト
15    files = os.listdir(dirname)
16    files.sort()
17    for f in files:
18        # 拡張子をチェックしてpythonのソースであれば行数を数える
19        if os.path.splitext(f)[1] == '.py':
20            with open(f, 'r') as fp:
21                c = len(fp.readlines())
22            print('{} : number of lines = {}'.format(f, c))
23
24
25def count_py_lines2(dirname):
26    print('*** count_by_lines2')
27    # wcコマンドで行数を数える
28    cmd = 'wc -l {}/*.py'.format(dirname)
29    r = subprocess.run(cmd, shell=True, capture_output=True, text=True)
30    # コマンドの出力からファイル名と行数を取り出す
31    for line in r.stdout.split('\n'):
32        l = line.strip().split()
33        if len(l) == 2 and os.path.splitext(l[1])[1] == '.py':
34            c = l[0]
35            f = os.path.split(l[1])[1]
36            print('{} : number of lines = {}'.format(f, c))
37
38
39if __name__ == '__main__':
40    # pythonのみで実装したもの
41    count_py_lines1('.')
42    # シェルコマンドの結果を処理したもの
43    count_py_lines2('.')