0

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

从代码中可以明显看出,希望我在工作/根目录中都有一个文件。我需要阅读并打印它。

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 时,我阅读了这些行。所以到了文件的结尾。为了得到我想要的结果,我要克服这个吗?

PS如果重要的话它是python 3.3

4

2 回答 2

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(). 解决方案:

蟒蛇 3:

print(myline, end='')

蟒蛇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语句相同级别的代码。

于 2013-06-10T21:45:23.073 回答
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)
于 2013-06-10T21:45:04.540 回答