python文件处理代码中的奇怪行为(也许只是我)

时间:2019-07-14 14:10:57

标签: python fopen

我刚刚开始学习python3中的文件处理。我尝试创建的代码接受用户提供的文件名,打开文件,然后打印出文件中的行数和字符总数。

问题是我必须分别为行数和字符数声明不同的变量(在下面的示例中为fh和fl)。

在以下按预期方式工作的代码中,如果我注释掉fl = open(fname)行并将for line in fl:更改为for line in fh,则输出中的行数将变为零(不期望)

fname = input('Enter the file name: ')
fh = open(fname)
text = fh.read()
fl = open(fname)
count = 0
for line in fl:
  count = count + 1
print("line count in", fname, ":", count)
print("word count in", fname, ":", len(text))

这是否意味着将来如果我要在同一文件上处理字符串函数,我必须声明不同的变量并多次读取同一文件?有没有一种方法可以实现“一次读取,多次使用”的目标?

1 个答案:

答案 0 :(得分:0)

当您从打开的文件中读取行时,也会跟踪当前所在的偏移量。因此,在您读完所有行(如在for循环中)之后,该位置将位于文件的末尾。

您可以使用f.seek(0)将文件中的当前位置重新设置为开头。然后,您可以再次执行for line in f并两次浏览相同的内容,而不必两次open

请参见file methods

当然,您也可以在读取文件时在一个循环中存储内容并计算行数。或使用readlines方法获取文件中的行列表。使用readlines方法是一种仅读取文件并以有用的格式获取内容的好方法。