0

テキスト ファイルを読み取り、行数、単語数、文字数をカウントするプログラムを作成する必要がありました。個別に区切られている場合はすべて以下で機能しますが、ファイルを一度読み取れるように関数を使用するように変換したかったのですが、さまざまな回答が得られ続け、何が間違っているのかわかりません。

単語コード

print ' '
fname = "question2.txt"
infile = open ( fname, 'r' )
fcontents = infile.read()

words = fcontents.split()
cwords = len(words)

print "Words: ",cwords

文字コード

fname = "question2.txt"
infile = open ( fname, 'r' )
fcontents = infile.read()

char = len(fcontents)

print "Characters: ", char

回線コード

fname = "question2.txt"
infile = open ( fname, 'r' )
fcontents = infile.readlines()

lines = len(fcontents)

print "Lines: ", lines

正しい結果

単語: 87
文字: 559
行: 12

これは、関数を使用しようとしているときに思いついたものですが、何が問題なのかわかりません。

def filereader():
    fname = 'question2.txt'
    infile = open ( fname, 'r' )
    fcontents = infile.read()
    fcontents2 = infile.readlines()

    return fname, infile, fcontents, fcontents2


def wordcount(fcontents):
    words = fcontents.split(fcontents)
    cwords = len(words)
    return cwords

def charcount(fcontents):
    char = len(fcontents)
    return char

def linecount(fcontents2):
    lines = len(fcontents2)
    return lines


def main():

    print "Words: ", wordcount ('cwords')
    print "Character: ", charcount ('char')
    print "Lines: ", linecount ('lines')

main()

間違った結果

単語: 2
文字: 4
行: 5

4

3 に答える 3

2
    infile = open ( fname, 'r' )
    fcontents = infile.read()
    fcontents2 = infile.readlines()

ファイルから 2 回読み取ることはできません。

于 2012-09-05T14:22:40.243 に答える
2

filereaderで使用する必要がありますmain:

def main():
    fname, infile, fcontents, fcontents2 = filereader()
    print "Words: ", wordcount (fcontents)
    print "Character: ", charcount (fcontents)
    print "Lines: ", linecount (fcontents2)

そうでなければ、どのようにして値を取得fcontentsfcontents2、他の関数に渡すのでしょうか? filereaderまた、ファイルを 1 回読み取るように修正する必要があります。

def filereader():
    fname = 'question2.txt'
    infile = open ( fname, 'r' )
    fcontents = infile.read()
    fcontents2 = fcontents.splitlines(True)
    return fname, infile, fcontents, fcontents2

の行が改行fcontents2で分割されるように変更されていることに注意してください (「 」を参照)。これにより、文字列のリストも得られます。fcontentsstr.splitlines.readlines()

于 2012-09-05T14:24:20.473 に答える
0

ファイルから読み取ると、ファイル ハンドルはファイル内の位置を記憶します。したがって、呼び出しの後infile.read()infileファイルの最後に配置されます。次に を呼び出すとinfile.readlines()、現在の位置からファイルの末尾までのすべての文字を読み取ろうとするため、空のリストが返されます。

を使用して、ファイルを最初の位置に巻き戻すことができますinfile.seek(0)。したがって:

>>> fcontents = infile.read()
>>> infile.seek(0)
>>> flines = infile.readlines()

動作します。

または、ファイルを string に読み込んだ後、fcontents次のコマンドを使用して文字列を行に分割できますsplitlines

>>> fcontents = infile.read()
>>> flines = fcontents.splitlines()
于 2012-09-05T14:25:59.253 に答える