3

フォルダ内の各ファイルの行数を取得し、ファイル名と一緒に行数を隣接して印刷したかったのです。プログラミングの世界に入ったばかりの私は、あちこちからそれらを借りて、なんとかこの短いコードを書くことができました。

#count the number of lines in all files and output both count number and file name
import glob
list_of_files = glob.glob('./*.linear')
for file_name in list_of_files:
    with open (file_name) as f, open ('countfile' , 'w') as out :
        count = sum (1 for line in f)
        print >> out, count, f.name

ただし、これにより、ファイルの1つだけが出力されます。

これは、シェルで.linearを使用して非常に簡単に実行できますがwc -l *、Pythonでこれを実行する方法を知りたいと思いました。

PS:質問を重複させないことを心から願っています!

4

1 に答える 1

7

あなたは本当に近いです!ループ内ではなく、countfileを1回開くだけです。

import glob
with open('countfile' , 'w') as out:
    list_of_files = glob.glob('./*.linear')
    for file_name in list_of_files:
        with open(file_name, 'r') as f:
            count = sum(1 for line in f)
            out.write('{c} {f}\n'.format(c = count, f = file_name))

wファイルがモードで開かれるたびに(たとえばopen('countfile', 'w'))、countfile(すでに存在する場合)の内容が削除されます。そのため、一度だけ呼び出す必要があります。

于 2012-12-20T13:47:09.600 に答える