1

単語数など、さまざまなことを知りたいテキスト ファイルのさまざまなコレクションを扱っています。これを正常に実行するコードがあり、その方法で機能するスクリプトをワークフローに導入したいと考えています。ディレクトリを介して、そこにあるテキスト ファイルの統計をコンパイルします。

これが私のドラフトです:

#! /usr/bin/env python

# Get from each text file a total word count and a unique word count.
# Output a CSV with three columns: filename, total, unique.

import glob

with open (file_name) as f, open ('countfile.csv', 'w') as out :
    list_of_files = glob.glob('./*.txt)
    for file_name in list_of_files:

        ???

        out.write('{f},{t},{u}\n'.format(f =file_name, t =word_total, u =uniques)

上記の疑問符は、各ファイルで何をしたいかのプレースホルダーです。これは、以下のコードです。

# Total No. of Words        
word_list = re.split('\s+', textfile.read().lower())
word_total = len(word_list)

# Unique Words
freq_dic = {}
punctuation = re.compile(r'[.?!,":;]') 
for word in word_list:
    # remove punctuation marks
    word = punctuation.sub("", word)
    # form dictionary
    try: 
        freq_dic[word] += 1
    except: 
        freq_dic[word] = 1

uniques = len(freq_dic)

このコードをすべて上記のコードに挿入する方法がよくわかりません。うまくいかないのではないかと思うのですが、どうすればいいのか途方に暮れています。ここで何か助けていただければ幸いです。これを理解できれば、かなりの数のことを自動化できると思います。

2 番目のコード ブロックは、おそらく最も美しいものではないことはわかっていますが、可能な限りコンパクトであり、何をしているのかを理解することもできます。間違いなくおわかりのように、私は Python を学び始めたばかりです。

明確化のために編集:

私が持っているのは、テキストのディレクトリです:

text1.txt  
text2.txt  
text3.txt  

私が望むのは、このスクリプトをそのディレクトリに向けて、すべてのテキストを通過させ、次の形式で CSV ファイルを出力させることです。

text1, 345, 123
text2, 1025, 318
text3, 765, 245

(.txtファイル名を切り取る必要はありません。念のため。)

4

1 に答える 1

3
files = {}
for fpath in glob.glob("*.txt"):
    with open(fpath) as f:
         fixed_text = re.sub("[^a-zA-Z'-]"," ",f.read())
    words = fixed_text.split()
    total_words = len(words)
    total_unique = len(set(words))
    files[fpath] = (total_words, total_unique)
    print "Total words:", total_words
    print "Total unique:", total_unique

with open("some_csv.csv", "w") as f:
    for fname in files:
        print >> f, "%s,%s,%s" % (fname, files[fname][0], files[fname][1])

私はそれがうまくいくはずだと思う...

于 2013-04-16T22:15:37.843 に答える