2017-04-15 15 views
1

空きスペースでcharctersをどのように数えますか?私は正しい番号を得ていない。 num_charsxの右の数はあなたが「」の代わりに「\ nを」で行を分割しようとする場合があります1761ファイル内に空白を含まないPython計算文字列

num_words = 0 
num_chars = 0 
with open("C:/Python33/fire.txt",'r') as f: 
    for line in f: 
     words = line.split('\n') 
     num_words += len(words) 
     num_chars += len(line) 
    num_charsx = num_chars - line.count(' ') 
print(num_charsx) 
2064 

答えて

0
words = line.split('\n') 
num_words += len(words) 

は、あなたはそれがないと思う何をしません。ループ内

for line in f: 

line'\n'で終了する文字列であるので、line.split('\n')が終了'\n'別にラインのすべての文字を含む最初の項目で、二項目のリストです。そのリストの2番目の項目は空の文字列です。例:

line = 'This is a test\n' 
words = line.split('\n') 
print(words, len(words)) 

出力

['This is a test', ''] 2 

だからあなたnum_words += len(words)が実際に単語をカウントしない、それだけで行数の二倍のカウントを取得します。

はあなたが必要 line中の単語の実際のリストを取得するには

words = line.split() 

それが最後の行のスペース数を減算してあなたの最後から二番目のライン

num_charsx = num_chars - line.count(' ') 

forループの外にありますファイル全体のnum_charsから、しかし私はあなたが実際にファイル全体の合計のスペース数をnum_charsから差し引きたいと仮定します。

修正されたバージョンのコードです。

num_words = 0 
num_chars = 0 
num_spaces = 0 
with open(fname, 'r') as f: 
    for num_lines, line in enumerate(f, 1): 
     num_words += len(line.split()) 
     num_chars += len(line) - 1 
     num_spaces += line.count(' ') 

num_charsx = num_chars - num_spaces 
print(num_lines, num_words, num_chars, num_spaces, num_charsx) 

enumerateを使用するようにライン読み取りループを変更しました。これは、行番号と行の内容を個別の行カウンタを維持することなく取得する効率的な方法です。

num_chars += len(line) - 1-1では、各行の末尾にはが含まれていません。

Windowsでは、テキストファイルの行は(通常)'\r\n'で終端されていますが、テキストモードで開いたファイルを読み取ると、ターミネーターは'\n'に変換されます。したがって、Windowsではファイルの実際のバイトサイズはnum_chars + 2 * num_linesです。最後の行に'\r\n'ターミネータがあると仮定します。実際のサイズは2バイト小さくなります。

0

です。 '\ n'はforループによってかなり行われるはずです。

もう一つのオプションは、単に文字数を必要とする場合は、replaceメソッドを使用して ''を削除し、文字列の長さを数えることができるということです。

num_chars = len(line.replace(' ', '')) 
0

また、これを試みることができる:

num_chars = 0 
with open("C:/Python33/fire.txt",'r') as f: 
    for line in f: 
     num_chars += len(line.split('\n')[0]) 
    num_charsx = num_chars - line.count(' ') 
print(num_charsx) 
0

あなたはこれを試みることができる:

num_char = 0 
f = open("C:/Python33/fire.txt") 
word_list = ' '.join(f.read().splitlines()).split() 
for x in word_list: 
    num_char += len(x) 
print(num_char) 
関連する問題