2016-05-10 14 views
0

テキスト内の特定の特性を識別するテキストファイルを読み込んでいます。それは15個のスペースがあるの代わりに、6スペースカウントが間違っていますか?

テキストファイルは

Hello 
Do school units regularly 
Attend seminars 
Study 4 tests 
Bye 

で、スクリプトが

def main(): 
    lower_case = 0 
    upper_case = 0 
    numbers = 0 
    whitespace = 0 
    with open("text.txt", "r") as in_file: 
     for line in in_file: 
      lower_case += sum(1 for x in line if x.islower()) 
      upper_case += sum(1 for x in line if x.isupper()) 
      numbers += sum(1 for x in line if x.isdigit()) 
      whitespace += sum(1 for x in line if x.isspace()) 

    print 'Lower case Letters: %s' % lower_case 
    print 'Upper case Letters: %s' % upper_case 
    print 'Numbers: %s' % numbers 
    print 'Spaces: %s' % whitespace 


main() 

であることを表示するスペース部分があります達するまで、すべてが罰金を判明しますスペースの数が6になるように変更する必要があるものは何ですか?

+0

ループ内に 'print repr(行)'を追加すると、すべての文字が表示されます。最後に改行文字が追加されている可能性があります。 'line.rstrip()'または 'line.endswith( '\ n'):行=行[: - 1]'でそれらを削除することができます。 –

+0

また、Pythonの 'True == 1'と' False == 0'のように 'lower_case + = sum(x.islower()for x in line)'や 'sum(map(str。 islower、line)) 'を実行します。 –

答えて

0

この理由は、改行もスペースであると考えられるためです。現在、開いているファイルはおそらくWindows上に作成されています.Windowsでは、改行は2文字(実際の改行とキャレットリターン)です。 5行あるので余分な10個の空白があります。合計16個です(1つはどこかで失われてしまい、末尾に改行が1つしかないと推測できます)。

修正するには、空白を数えたときに行を削除してください。

whitespace += sum(1 for x in line.strip() if x.isspace()) 

これは、改行ではない後続および先頭のスペースも取り除きます。端部のみから改行を取り除くために、あなたは他の可能性がisspace()を使用するのではなく、あなたが、例えばしたい文字をチェックしないことです

whitespace += sum(1 for x in line.rstrip("\r\n") if x.isspace()) 
+1

Windowsでは、ファイルがテキストモードで開かれているため、これらのCRLF行の末尾はプレーンLFに変換されます。 Windows上で作成され、Unix上で開かれたファイルである可能性があります。 – user2357112

+1

'line.rstrip( '\ r \ n')'は最後に提案したことを行います。 –

+2

最後の行にCRもLFもないと思います。しかし、*後にスペースがあります。 – user2357112

0

行うことができます

whitespace += line.count(' ') + line.count('\t') 
関連する問題