对于作业,我必须计算文件的字符和行。我提出了以下想法:
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())
但我仍然很好奇为什么第一个脚本无法正常工作!
答案 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()