2

それぞれ8/9列を含む複数のファイルがあります。

単一のファイルの場合: 値を含む最後の列を読み取り、各値の出現回数を数えてから出力ファイルを生成する必要があります。

私はそれを次のようにしました:

inp = open(filename,'r').read().strip().split('\n')  
out = open(filename,'w')  
from collections import Counter  
C = Counter()  
for line in inp:  
    k = line.split()[-1] #as to read last column  
    C[k] += 1  
for value,count in C.items():  
    x = "%s   %d" % (value,count)  
    out.write(x)  
    out.write('\n')  
out.close()  

問題は、1 つの入力に対して 1 つの出力を生成する必要がある場合に問題なく動作することです。glob.iglobしかし、すべてのファイルを入力として使用するには、関数を使用してディレクトリをスキャンする必要があります。そして、各ファイルに対して上記のプログラムを実行して各ファイルの結果を収集する必要があり、もちろん、各ファイルのすべての分析結果を単一の OUTPUT ファイルに書き込む必要があります。

注: 単一の OUTPUT ファイルの生成中に値が繰り返されることが判明した場合、同じエントリを 2 回書き込む代わりに、「カウント」のみを合計することをお勧めします。たとえば、最初のファイル生成の分析:

123 6  
111 5  
0   6  
45  5  

および 2 番目のファイル生成:

121 9  
111 7  
0   1  
22  2  

この場合、OUTPUT ファイルは、次の内容を含むように記述する必要があります。

123 6  
111 12 #sum up count no. in case of similar value entry  
0   7  
45  5  
22  2  

私はプログラムを書きました。単一ファイル分析用ですが、質量分析セクションで立ち往生しています。助けてください。

4

4 に答える 4

2
from collections import Counter
import glob

out = open(filename,'w')
g_iter = glob.iglob('path_to_dir/*')  
C = Counter()
for filename in g_iter:
    f = open(filename,'r')
    inp = f.read().strip().split('\n')
    f.close()
    for line in inp:
        k = line.split()[-1] #as to read last column
        C[k] += 1
for value,count in C.items():
    x = "%s %d" % (value,count)
    out.write(x)
    out.write('\n')
    out.close()
于 2012-05-06T12:44:56.140 に答える
1

脱醜化後:

from collections import Counter
import glob

def main():
    # create Counter
    cnt = Counter()

    # collect data
    for fname in glob.iglob('path_to_dir/*.dat'):
        with open(fname) as inf:
            cnt.update(line.split()[-1] for line in inf)

    # dump results
    with open("summary.dat", "w") as outf:
        outf.writelines("{:5s} {:>5d}\n".format(val,num) for val,num in cnt.iteritems())

if __name__=="__main__":
    main()
于 2012-05-07T01:48:03.830 に答える
0

私はこれが好きでした。

import glob
out = open("write.txt",'a')  
from collections import Counter  
C = Counter()  
for file in glob.iglob('temp*.txt'):
    for line in open(file,'r').read().strip().split('\n'):  
        k = line.split()[-1] #as to read last column  
        C[k] += 1  
for value,count in C.items():  
        x = "%s   %d" % (value,count)  
        out.write(x)  
        out.write('\n')  
out.close()  
于 2013-01-27T04:49:56.520 に答える