作为一种练习,我正在学习阅读文件。
从代码中可以明显看出,我希望在工作/ root目录中有一个文件。我需要阅读并打印出来。
my_file=open("new.txt","r")
lengt=sum(1 for line in my_file)
for i in range(0,lengt-1):
myline=my_file.readlines(1)[0]
print(myline)
my_file.close()
这会返回错误says out of range
。
文本文件只包含
之类的语句line one
line two
line three
.
.
.
一切都一样,我试过myline=my_file.readline()
。我得到空7行。
我的猜测是,在my_file中使用for line时,我会读到这些行。所以达到了文件的最后。为了得到我想要的相同结果,我是否克服了这个?
P.S。如果这很重要,那就是python 3.3
答案 0 :(得分:2)
无需依赖。 Python为你做到了:
my_file = open("new.txt","r")
for myline in my_file:
print(myline)
my_file
是一个迭代器。这是一个允许迭代它的特殊对象。
您还可以访问一行:
line 1 = next(my_file)
假设刚刚打开文件,会给出第一行。再做一次:
line 2 = next(my_file)
你得到了第二行。如果你现在迭代它:
for myline in my_file:
# do something
它将从第3行开始。
print(myline)
可能会打印一个额外的空行。这是因为从文件读取换行符和print()
添加的换行符。解决方案:
Python 3:
print(myline, end='')
Python 2:
print myline, # note the trailing comma.
使用with
这样的语句:
with open("new.txt", "r") as my_file:
for myline in my_file:
print(myline)
# my_file is open here
# my_file is closed here
您离开上下文后不需要像关闭文件一样关闭文件,即只要您继续使用与with
语句相同的级别。
答案 1 :(得分:0)
您可以通过迭代文件内容来实际处理所有这些:
my_file = open("new.txt", "r")
length = 0
for line in my_file:
length += 1
print(line)
my_file.close()
最后,您将打印所有行,length
将包含文件中的行数。 (如果你不是特别需要知道length
,那就没有必要了!)
另一种方法,它将为您关闭文件(事实上,如果引发异常,甚至会关闭文件):
length = 0
with open("new.txt", "r") as my_file:
for line in my_file:
length += 1
print(line)