shanhong2021 发表于 2021-6-22 08:27:51

新手文件问题

a.txt内容是这样的
1
2
3
4
5
6
7
8
f = open('a.txt')
for _ in f:
    print(f.readline())
输出
2

4

6

8
问题为什么单行都不见了

z5560636 发表于 2021-6-22 09:12:57

f = open('a.txt')
while f:
    print(f.readline())

shanhong2021 发表于 2021-6-22 09:18:06

试了一下怎么是死循环了呢
输出
Process finished with exit code -1

逃兵 发表于 2021-6-22 13:57:41

f = open('a.txt')
for _ in f:
    print(_,end='')

litao59 发表于 2021-6-22 16:09:28

f = open("123.txt","r",encoding="utf8")
# print(f.read())
for i in range(8):
    print(f.readline())

shanhong2021 发表于 2021-6-22 16:33:19

谢谢回答。我只想知道为什么用我的方法单数行就不见了。用小甲鱼教的
for each_line in f:
   print(each_line)
也可以得到答案
上面的方法哪里有问题呢。


      

灰晨 发表于 2021-6-22 18:30:10

for _ in f:
    print(f.readline())
进循环的时候 _就读取了文件中的第一行,所以,print(f.readline())因为第一行已经读过了所以读取第二行,第二次循环_应该要读第二行,但第二行被读过了,所以读第三行...
emmmm,同为小白,个人理解,仅供参考

shanhong2021 发表于 2021-6-22 18:56:58

还是不懂。不是一行一行的读吗?怎么就读过了呢

shanhong2021 发表于 2021-6-22 19:05:34

谢谢大家回答我的问题。逃兵同学用的跟小甲鱼课上讲的一样的方法。litao59同学你怎么就事先知道有8行呢。我只想知道为什么用readline()就会把单行都读没了。那我以后还怎么敢用readline()

阿奇_o 发表于 2021-6-22 22:23:42

本帖最后由 阿奇_o 于 2021-6-22 22:28 编辑

shanhong2021 发表于 2021-6-22 18:56
还是不懂。不是一行一行的读吗?怎么就读过了呢

你先用了 for _ in f:   #这就会每次读取一行的内容到局部变量 _ 里(但你没有打印它,所以看不到)

f.readline()是一次读取一行并返回带''\n'换行符的一行字符,并且每次读取后“游标/指针”向下走一行。
for循环里你又用 f.readline(), 游标就再次读取并返回一行(你打印了于是看得见)。同时游标也会下移一行。…… 规律就这样。

ps: 读写文件的方式,基本是固定,你不用自己发明。
另外,官方文档有很好的例子,自己实现和熟悉几下,就好了。


nahongyan1997 发表于 2021-6-23 10:24:32

f = open('a.txt')
# 这里for 循环读取了一行文件,但是没有打印
for _ in f:
    # 如果想打印for循环读取的文件应该在这里写:
    print(_)
    # 这里f.readline()又读取了一行文件并且通过 print 打印了出来
    print(f.readline())

python 的文件读写你可以想象成文件对象内部有一个游标在操作,
不管你用任何方法读取一行文件都会使光标下移一行,并且不会自动回位,只能手动使用seek方法调整游标位置。

nahongyan1997 发表于 2021-6-23 10:26:30

shanhong2021 发表于 2021-6-22 19:05
谢谢大家回答我的问题。逃兵同学用的跟小甲鱼课上讲的一样的方法。litao59同学你怎么就事先知道有8行呢。我 ...

确实的说 readline 在实际应用中用到的次数并不多,可以说少的可凉。

shanhong2021 发表于 2021-6-23 18:59:06

似乎有点懂了。主要是指针的问题原来不知道。不过还是不是十分懂。为什么不是1,3,5,7而是2,4,6,8呢。先从第一行读然后指针转到第二行。再读就变第3行不是这样吗?

shanhong2021 发表于 2021-6-23 19:09:20

好像明白了for _ in f:这一句本身就是读了一行并且把指针跳到下一行了。然后f.readline()就是读的2然后for _ in f又读了第三行并且把指针跳到第4行。所以f.readline()打出的是第4行。以此类推。谢谢各位大神回答我的问题
页: [1]
查看完整版本: 新手文件问题