使用' Open'命令在Python中对文件中的行和字符进行计数

时间:2015-02-02 14:00:19

标签: python

对于作业,我必须计算文件的字符和行。我提出了以下想法:

ascii_file = open('ascii.txt')
num_lines  = sum(1 for line in ascii_file)
num_char   = len(ascii_file.read())

但是这会为num_char值返回0。为什么会这样? 我找到的解决方案很简单:

ascii_file = 'ascii.txt'
num_lines  = sum(1 for line in open(ascii_file))
num_char   = len(open(ascii_file).read())

但我仍然很好奇为什么第一个脚本无法正常工作!

2 个答案:

答案 0 :(得分:2)

在第一次迭代ascii_file之后,文件对象sum(1 for line in ascii_file)迭代器已用完。

您需要使用ascii_file.seek(0)返回文件的开头,然后执行num_char = len(ascii_file.read())或使用ascii_file = open('ascii.txt').read()存储变量ascii__file中的所有行。

在第二个示例中,您将打开文件两次,这样您就不会迭代同一个文件对象。

在旁注上你应该用来打开文件,因为它会自动关闭它们:

with open('ascii.txt') as ascii_file:
    ...

一个例子:

In [32]: f = iter([1,2,3])

In [33]: for line in f: # first iteration prints 1,2,3
            print(line)
   ....:     
1
2
3

In [34]: for line in f: # no output as iterator is exhausted
            print(line)
   ....:     

答案 1 :(得分:1)

计算文件中的行数

ascii_file=open("ascii.txt",'r')
num_lines=len(ascii_file.readlines())
num_char=len(ascii_file.read())
ascii_file.close()