次の形式のファイルがたくさんあります。
15
17
18
21
14
18
14
13
17
11
11
18
15
15
12
17
9
10
12
17
14
17
etc
次のスクリプトは、これらのファイルを読み取ります。
import os
from collections import Counter
def main():
p = './newR'
fd = os.listdir(p)
countUniq(p, fd)
def writeFile(fd, fhp, fcount):
fo = './nnewR/'+fd+'.txt'
with open(fo, 'a') as f:
r = '%s %s\n' % (fhp, fcount)
f.write(r)
def countUniq(path, dirs):
for pfiles in dirs:
pathN = os.path.join(path, pfiles)
with open(pathN, 'r') as infile:
data = infile.read()
fileN = os.path.basename(pathN)
stripFN = os.path.splitext(fileN)[0]
fDate = stripFN.split('_')[0]
countr = Counter()
countr.update([int(d) for d in data.split()])
for line, count in countr.items():
writeFile(fDate, line, count)
main()
これにより、次のファイルが出力されます。
20130813.txt
20130819.txt
20130825.txt
20130831.txt
etc
それが仕事をするかどうかをテストするために最初のファイルを見てみましょう:
51 4
9 4
10 36
11 48
12 132
13 144
14 148
15 133
16 52
17 105
18 61
19 20
20 12
21 16
22 20
23 8
これは奇妙です。なぜ 9 のような最小の数字で始まらず、代わりに 51 で始まるのですか?
ランダムにチェックした場合の別のファイル:
28 4
9 20
10 122
11 136
12 298
13 302
14 397
15 314
16 218
17 264
18 148
19 93
20 32
21 49
22 16
23 13
24 8
25 4
60 4
繰り返しますが、これは最小の数字から始まりません。これは間違った出力です。ファイルを読み取るときのループに関係していると思われますが、しばらくこの点で立ち往生しているため、よくわかりません。
ここで実際にいくつかの入力を使用できます。
私が使うとき
。ごくありふれた()
それ以外の
.items()
for line, count in countr.most_common():
print fDate, line, count
.items() のようにソートされていないほど、すべてが混同されます。
20130822 14 379
20130822 15 336
20130822 12 306
20130822 13 292
20130822 17 266
20130822 16 200
20130822 18 172
20130822 11 132
20130831 14 364
20130831 15 353
20130831 12 302
20130831 13 300
20130831 17 281
20130831 16 244
20130831 18 153
20130831 11 133
20130831 10 121
20130831 19 73
20130831 21 32
20130820 14 387
20130820 15 338
20130820 12 308
20130820 13 300
20130820 17 282
20130820 16 193
20130820 18 169
20130820 11 136
20130820 10 116
20130820 19 85
20130820 21 44
ソートするのに近いものではありません