2016-05-31 6 views
-4

すべてのテキストファイルの行を1つのディレクトリに集計し、ファイル数に関する一般レポートをn行で作成する必要があります。複数のテキストファイルを1つのディレクトリに集めて簡単なレポートを作成するPythonスクリプト

報告書は次のようになります。

Files with 1 line: 636 
Files with 2 lines: 346 
Files with 3 lines: 234 
Files with 4 lines: 723 
Files with 5 lines: 254 
Files with 6 lines: 223 
Files with 7 lines: 1464 
etc. 

私はディレクトリ Python script to count num lines in all files in directory内のすべてのファイル内の行をカウントするため、このスクリプトを発見した:

#!/usr/bin/env python 

import csv 
import copy 
import os 
import sys 
import glob 

#get current working dir, set count, and select file delimiter 
os.chdir('/mydirectory') 

#parses through files and saves to a dict 

names={} 
for fn in glob.glob('*.txt'): 
    with open(fn) as f: 
     names[fn]=sum(1 for line in f if line.strip() and not line.startswith('#'))  

print names 

#save the dictionary with key/val pairs to a csv 
with open('seriescount.csv', 'wb') as f: 
    w = csv.DictWriter(f, names.keys()) 
    sum(names.values()) 

はどのように我々は、単純なを生成行くのです上記のような報告?おかげさまで

+0

例があります。だから働き始めて尋ねないで。 – qvpham

+1

ではなく、問題を解決しない低品質のスクリプトを検索する代わりに、Pythonを学習して独自のスクリプトを作成してみてください。 – Daniel

+1

私はこの問題が境界線であることに同意しますが、Stack Overflowのベースラインは「プログラミングに関する検索可能な公的な記事の百科事典を構築する」ではなく、「質問する、答えを得る、気を散らす」ではありません。この質問はこの哲学を尊重し、ほとんどの1ライナー「私の問題を解決してください」よりも多くの研究努力を示しています。 – Jivan

答えて

0

あなたnames dictのは、次のようになります。

{ 
    'file1.txt': 30, 
    'file2.txt': 26, 
    'file3.txt': 19, 
    'file4.txt': 19 
} 

ですから、ちょうどそれから始める必要があるだろうとし、次のとおりです。

Files with 19 lines: 2 
Files with 26 lines: 1 
Files with 30 lines: 1 
:これは、のようなものを出力します

from collections import defaultdict 

lines = defaultdict(int) 
for val in names.values(): 
    lines[val] += 1 

for k, v in lines.items(): 
    print("Files with {} lines: {}".format(k, v)) 

+0

Downvoters downvote ... – Jivan

+0

ありがとう百万@ジバンそれはトリックを行います! – jigitjigit2

関連する問題