0

我希望执行的最终代码是读取名为“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”的示例:

约翰

玛丽

保罗

4

5 回答 5

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()

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

于 2012-07-18T16:58:12.957 回答
0

考虑到文本文件中的名称是按行分隔的。

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

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

这将创建每个名称的字典,并具有其出现次数。

在列表中搜索特定名称的出现,例如“name1”

lstLines.count('name1')
于 2012-07-18T17:00:26.500 回答
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()
于 2012-07-18T17:01:14.250 回答
0

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

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

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

# Close the file.
myfile.close()
于 2012-07-18T17:02:05.827 回答
-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, '')))

另请参阅,为什么在 C++ 中从标准输入读取行比 Python 慢得多?

于 2012-07-18T17:05:27.357 回答