0

これまでのところ私のコードはこれです:

from glob import glob
shakedir='D:\report\shakeall'
from shakedir import isfile
def countwords(fp):
   with open(fp) as fh:
       return len(fh.read().split())
print "There are" ,sum(map(countwords, filter(isfile, glob("*.txt") ) ) ), "words in the files."

問題は、このコードが機能しないことです:)

私はPythonの文法に慣れていないので、何でも試しました。

私が欲しいのは、このスクリプトが特定のディレクトリからテキストファイルをインポートすることです。

os.path私の.pyファイルがあるからではありません。

からインポートしたいのですが、D:\report\shakeallできません。それでおしまい。

アドバイスありがとうございます。

4

4 に答える 4

1

globこの目的のために関数を単独で使用することもできます。

from glob import glob

pattern = "D:\\report\\shakeall\\*.txt"
filelist = glob(pattern)

次に、そのファイルリストでやりたいことを何でもします。あなたのやり方は今うまくいくはずです:

def countwords(fp):
    with open(fp) as fh:
        return len(fh.read().split())

print "There are" ,sum(map(countwords, filelist))), "words in the files."
于 2012-08-08T12:53:57.957 に答える
0

os.walk("pathname")特定のディレクトリ内のファイルのリストを取得するために 使用できます。http://docs.python.org/library/os#os.walk

于 2012-08-08T12:42:33.300 に答える
0

バックスラッシュは、文字列リテラルのエスケープを示します。どちらかを試してください

"d:/report/shakeall"

または

"d:\\report\\shakeall"

理想的には:

os.path.join("d:", "report/", "shakeall")
于 2012-08-08T12:49:45.130 に答える
0

私があなたの質問を正しく理解しているなら、あなたが必要とするのは:

shakedir = "d:\\report\\shakeall"
..
print "There are" ,sum(map(countwords, filter(isfile, glob(shakedir + "\\*.txt"))))), ".."
                                                           ^^^^^ It can take directories too..

この線:

from shakedir import isfile

私には意味がありません。そして、isfileの実装を提供するか、osモジュールの実装を使用します。

于 2012-08-08T12:51:28.597 に答える