阅读线的两次组合效果?

时间:2013-06-10 21:41:24

标签: python file-io python-3.x

作为一种练习,我正在学习阅读文件。

从代码中可以明显看出,我希望在工作/ 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

2 个答案:

答案 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行开始。

Stange额外的线?

 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)