1

テキスト ファイル内の特定の種類の文字をすべて検出するコードを作成しようとしています。母音については、a の数はすべて検出されますが、テキストを再ループして e を読み取ることはありません。ヘルプ?

def finder_character(file_name,character):

    in_file = open(file_name, "r")

    if character=='vowel':
        brain_rat='aeiou'
    elif character=='consonant':
        brain_rat='bcdfghjklmnpqrstvwxyz'
    elif character=='space':
        brain_rat=''
    else:
        brain_rat='!@#$%^&*()_+=-123456789{}|":?><,./;[]\''       

    found=0 
    for line in in_file:
        for i in range (len(brain_rat)):
            found += finder(file_name,brain_rat[i+1,i+2])


    in_file.close()
    return found

def finder(file_name,character):
    in_file = open(file_name, "r")
    line_number = 1
    found=0
    for line in in_file:
        line=line.lower()
        found +=line.count(character)
    return found
4

2 に答える 2

2

これは、あなたがやろうとしていることのようですfinder_character。なぜあなたがfinderまったく必要なのかわかりません。

Python では、イテラブル (文字列など) をループできるため、range(len(string)).

for line in in_file:
    for i in brain_rat:
        if i in line: found += 1

あなたのコードには他にもいくつかの奇妙な点があるようです:

  • ファイルを 2 回開く (そして反復処理する) が、ファイルを閉じるのは 1 回だけです。
  • line_number使用されることはありません
  • ファイル内の各行のファイル内の文字の合計を取得するため、合計は大幅に膨らみます。

これはおそらくはるかに安全なバージョンであり、エラー処理と終了についてそれほど心配する必要がないため、with open...通常よりも優れています。open()... file.close()あなたがやろうとしていることを説明するのに役立つコメントをいくつか追加しました。

def finder_character(file_name,character):
    found=0    # Initialise the counter
    with open(file_name, "r") as in_file:
        # Open the file
        in_file = file_name.split('\n')

        opts = { 'vowel':'aeiou',
                 'consonant':'bcdfghjklmnpqrstvwxyz',
                 'space':'' }
        default= '!@#$%^&*()_+=-123456789{}|":?><,./;[]\''

        for line in in_file:
            # Iterate through each line in the file
            for c in opts.get(character,default):
                With each line, also iterate through the set of chars to check.
                if c in line.lower():
                    # If the current character is in the line
                    found += 1  # iterate the counter.
    return found    # return the counter
于 2013-10-29T23:11:18.787 に答える