2015-07-12 91 views
2

此代码将打印文本文件中的整行数,总字数和字符总数。它工作正常,并提供预期产出。但是,我希望计算每行的字符数,并打印这样的: -计算每行中的字符数

Line No. 1 has 58 Characters 
Line No. 2 has 24 Characters 

代码: -

import string 
def fileCount(fname): 
    #counting variables 
    lineCount = 0 
    wordCount = 0 
    charCount = 0 
    words = [] 

    #file is opened and assigned a variable 
    infile = open(fname, 'r') 

    #loop that finds the number of lines in the file 
    for line in infile: 
     lineCount = lineCount + 1 
     word = line.split() 
     words = words + word 

    #loop that finds the number of words in the file 
    for word in words: 
     wordCount = wordCount + 1 
     #loop that finds the number of characters in the file 
     for char in word: 
      charCount = charCount + 1 
    #returns the variables so they can be called to the main function   
    return(lineCount, wordCount, charCount) 

def main(): 
    fname = input('Enter the name of the file to be used: ') 
    lineCount, wordCount, charCount = fileCount(fname) 
    print ("There are", lineCount, "lines in the file.") 
    print ("There are", charCount, "characters in the file.") 
    print ("There are", wordCount, "words in the file.") 
main() 

由于

for line in infile: 
    lineCount = lineCount + 1 

计数的整行,但如何为每一行操作? 我正在使用Python 3.X

+0

您可以使用'len'功能。 –

+0

但是len也会计算空格和制表符。另外,如何将它应用于每一行?我需要另一个循环。 – cyberoy

+0

'len(re.findall(r'\ S',line))' –

回答

0

将所有信息存储在字典中,然后按键访问。

def fileCount(fname): 
    #counting variables 
    d = {"lines":0, "words": 0, "lengths":[]} 
    #file is opened and assigned a variable 
    with open(fname, 'r') as f: 
     for line in f: 
      # split into words 
      spl = line.split() 
      # increase count for each line 
      d["lines"] += 1 
      # add length of split list which will give total words 
      d["words"] += len(spl) 
      # get the length of each word and sum 
      d["lengths"].append(sum(len(word) for word in spl)) 
    return d 

def main(): 
    fname = input('Enter the name of the file to be used: ') 
    data = fileCount(fname) 
    print ("There are {lines} lines in the file.".format(**data)) 
    print ("There are {} characters in the file.".format(sum(data["lengths"]))) 
    print ("There are {words} words in the file.".format(**data)) 
    # enumerate over the lengths, outputting char count for each line 
    for ind, s in enumerate(data["lengths"], 1): 
     print("Line: {} has {} characters.".format(ind, s)) 
main() 

该代码仅适用于由空格分隔的单词,因此您需要牢记这一点。