读取文件并显示该文件中的名称总和

时间:2012-07-18 16:49:21

标签: python file

我想要执行的最终代码是在名为' names.txt'的文本文档中读取一串名称。然后告诉程序计算该文件中有多少名称并显示名称的数量。我到目前为止的代码是为了显示文本文件中数字的总和,但它足够接近我现在需要的程序,我想我可以重新编写它来收集字符串/名称的数量和显示而不是总和。

以下是目前的代码:

def main():
    #initialize an accumulator.
    total = 0.0

    try:
        # Open the file.
        myfile = open('names.txt', 'r')

        # Read and display the file's contents.
        for line in myfile:
            amount = float(line)
            total += amount

        # Close the file.
        myfile.close()

    except IOError:
        print('An error occured trying to read the file.')

    except ValueError:
        print('Non-numeric data found in the file.')

    except:
        print('An error occured.')

# Call the main function.
main()

我仍然是Python编程的新手,所以请不要对我太苛刻。如果有人可以弄清楚如何重做这个来显示数字/名称的数量而不是数字的总和。我将不胜感激。如果这个程序无法重新编写,我很乐意接受新的解决方案。

编辑:这是' names.txt'的一个例子。看起来像是:

约翰

玛丽

5 个答案:

答案 0 :(得分:0)

fh = open("file","r")
print "%d lines"%len(fh.readlines())
fh.close()

或者你可以做到

 fh=open("file","r")
 print "%d words"%len(fh.read().split())
 fh.close()

所有这些都是随时可用的信息,如果你付出一些努力就不难发现......只是得到答案通常会导致不及格的课程......

答案 1 :(得分:0)

考虑文本文件中的名称由行分隔。

myfile = open('names.txt', 'r')
lstLines = myfile.read().split('\n')

dict((name,lstLines.count(name)) for name in lstLines)

这将创建一个包含其出现次数的每个名称的字典。

在列表

中搜索特定名称的出现,例如“name1”
lstLines.count('name1')

答案 2 :(得分:0)

假设使用空格分割名称:

def main():
    #initialize an accumulator.
    total = 0.0

    try:
        # Open the file.
        myfile = open('names.txt', 'r')

        # Read and display the file's contents.
        for line in myfile:
            words = line.split()
            total += len(words)

        # Close the file.
        myfile.close()

    except IOError:
        print('An error occured trying to read the file.')

    except ValueError:
        print('Non-numeric data found in the file.')

    except:
        print('An error occured.')

# Call the main function.
main()

答案 3 :(得分:0)

如果您只想计算文件中的行

# Open the file.
myfile = open('names.txt', 'r')

#Count the lines in the file
totalLines = len(myfile.readlines()):

# Close the file.
myfile.close()

答案 4 :(得分:-1)

使用with语句打开文件。即使发生异常,它也会正确关闭文件。您可以省略文件模式,它是默认的。

如果每个名称都在其自己的行上并且没有重复项:

with open('names.txt') as f:
    number_of_nonblank_lines = sum(1 for line in f if line.strip())
name_count = number_of_nonblank_lines

任务很简单。从新代码开始,以避免为问题代码累积未使用/无效。

如果您只需要计算文件中的行数(例如wc -l命令),那么您可以使用.count('\n')方法:

#!/usr/bin/env python
import sys
from functools import partial

read_chunk = partial(sys.stdin.read, 1 << 15) # or any text file instead of stdin
print(sum(chunk.count('\n') for chunk in iter(read_chunk, '')))

另见Why is reading lines from stdin much slower in C++ than Python?