Python 具有for循环问题的readline

Python 具有for循环问题的readline,python,python-3.x,file,loops,Python,Python 3.x,File,Loops,我有一个.txt文件,其中包含10行文本排序(每个文本有三个逗号分隔的单词),但下面只读取文本文件中的四行: def main(): path = '/path/to/file.txt' f = open(path, 'r') for line in f: s = f.readline() print(s) f.close main() 但这会将所有行读取到列表中: def main(): path = '/path/t

我有一个.txt文件,其中包含10行文本排序(每个文本有三个逗号分隔的单词),但下面只读取文本文件中的四行:

def main():
    path = '/path/to/file.txt'
    f  = open(path, 'r')
    for line in f:
        s = f.readline()
        print(s)
    f.close
main()
但这会将所有行读取到列表中:

def main():
    path = '/path/to/file.txt'
    f  = open(path, 'r')
    s = f.readlines()
    print(s)
    f.close
main()

为什么for循环不起作用?

这样可以获得所有行:

with open('/path/to/file.txt') as fp:
    for line in fp.read().split('/n'):
        print(line)

这将有助于获得所有线路:

with open('/path/to/file.txt') as fp:
    for line in fp.read().split('/n'):
        print(line)

当在f中为行使用
时,您已经在读取一行了。因此,执行
readline()
是没有用的,因为它将读取下一行,这解释了为什么会读取4行而不是10行。

当使用
for line in f
时,您已经在读取一行了。因此,执行
readline()
是没有用的,因为它将读取下一行,这解释了为什么会读取4行而不是10行。

对于f中的行:
已经在文件中的行上迭代,然后尝试在该迭代中读取一行。只需使用
line
的值,并忘记
s

,因为f中的行:
已经在文件中的行上迭代,然后尝试
读取该迭代中的行。只需使用
行的值
并忘记
s

当您打开file.txt时,您会得到一个
\u io.TextIOWrapper
对象作为f


对于f中的行:
将在
f
迭代器上迭代,逐行将文件的每一行依次生成到
变量中。您可以看到迭代器是如何工作的

f
迭代器在循环开始后移动一行时,您可以使用
s=f.readline()
读取另一行,从而将迭代器向前移动一行。当您结束第一个循环时,将使用f:
中的
行读取另一行f:
,然后通过使用
s=f.readline()读取下一行来跳过该行

您的代码将与

def main():
    path = '/path/to/file.txt'
    with open(path, 'r') as f:
        for line in f:
            print(line)

main()

当您打开file.txt时,会得到一个
\u io.TextIOWrapper
对象作为f


对于f中的行:
将在
f
迭代器上迭代,逐行将文件的每一行依次生成到
变量中。您可以看到迭代器是如何工作的

f
迭代器在循环开始后移动一行时,您可以使用
s=f.readline()
读取另一行,从而将迭代器向前移动一行。当您结束第一个循环时,将使用f:
中的
行读取另一行f:
,然后通过使用
s=f.readline()读取下一行来跳过该行

您的代码将与

def main():
    path = '/path/to/file.txt'
    with open(path, 'r') as f:
        for line in f:
            print(line)

main()

我认为
对于f中的行
也会读取一行,
f.readline()
读取lineValueError中的下一行:混合迭代和读取方法会丢失数据我很惊讶它能工作。这是因为文件对象是类似迭代器的对象。这意味着当你在你的对象上迭代时,你正在消耗它的行一次,并且在
readline
中读取下一行。感谢你的输入,为了你的信息,Rolf,它肯定工作得不好,我不知道for循环已经读取了一行,很高兴知道。我认为
for line in f
也读取了一行,
f.readline()
读取lineValueError中的下一行:混合使用迭代和读取方法会丢失数据我很惊讶它能工作。这是因为文件对象是类似迭代器的对象。这意味着当你在你的对象上迭代时,你正在消耗它的行一次,然后在
readline
部分阅读下一行。谢谢你的输入,谢谢你的信息,Rolf,它肯定没有很好地工作,我不知道for循环已经在一行中读取了,很高兴知道。谢谢,是的,现在再次查看它,我可以看到我的循环现在读了两行,只打印了一行。取出s=f.readline()解决了问题。谢谢,是的,现在再看一遍,我可以看到我的循环现在读取两行,只打印一行。取出s=f。readline()解决了这个问题。