wrpython 发表于 2023-12-17 09:04:57

请问为什么指针不能回到文本开头?

大家好,我有一个如下的文本文档,需要从头开始读取文本,我使用了如下代码with open('L1_1.txt') as f:
    f.seek(0, 0)
    for line in f:
      print(line)
本来应该是从文本的第一行开始读取,也就是:
LocalTime=21:48:16.153,Message=L1DB,MarketTime=08:46:10.794......

但实际上代码是从文本中间开始读取的,而且每次开始读取的位置都还不一样。截图如下
请问这是为什么?我明明已经使用了f.seek()把指针移动到开头位置,而且用f.tell()查看的话结果确实是0,那么就应该是在文本开头啊



麻烦各位大大帮忙看看,谢谢!

FishC 发表于 2023-12-17 09:05:12

你的代码是没有问题的,f.seek(0, 0)确实是将文件指针移动到了文本的开头位置,但是在读取文件的时候,文件指针会随着读取操作自动向后移动。所以在for循环中每次读取一行后,文件指针会自动移动到下一行的位置。

你可以在循环外使用f.tell()打印文件指针的位置,可以看到它在循环开始时是0,在每次循环结束后递增的。

如果你想让文件指针在循环结束后回到开头位置,可以将文件对象重新赋值给一个变量,然后在循环结束后再次使用seek方法将文件指针移动到开头位置,如下所示:

with open('L1_1.txt') as f:
    for line in f:
      print(line)
    f.seek(0, 0)
    for line in f:
      print(line)

这样就可以在第二个循环中从文件开头位置开始读取了。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

陈勃 发表于 2023-12-17 10:39:04

{:10_257:}{:10_257:}{:10_257:}

wrpython 发表于 2023-12-18 10:54:06

顶一下

阿奇_o 发表于 2023-12-18 15:12:09

一般就不需要操作指针,一打开后的本来就是从第一行第一个字节开始的读取的。
你说它从中间开始读,可能是你前面操作了指针位置,然后 文件流 又没 close() 的缘故。。
试试重启IDE,只用 with open('L1_1.txt') as f:
    # f.seek(0, 0)# 不需要
    for line in f:
      print(line)

wrpython 发表于 2023-12-18 19:45:57

阿奇_o 发表于 2023-12-18 15:12
一般就不需要操作指针,一打开后的本来就是从第一行第一个字节开始的读取的。
你说它从中间开始读,可能是 ...

谢谢回复,我发现代码是正常的,因为直接用python自带的IDLE运行时,文本是直接从头开始读取的,只有在pycharm里读取时才会从中途开始读,机器人说这是pycharm的配置问题引起的,给了一个更改配置的步骤
1. 打开 PyCharm,并选择菜单栏中的 "Run" -> "Edit Configurations"。
2. 在弹出的对话框中,选择你的运行配置文件。
3. 在右侧的 "Configuration" 标签页中,找到 "Execution" 部分。
4. 在 "Execution" 部分,将 "Run with Python console" 的选项取消勾选。
5. 确定保存,并重新运行代码。

参考这个之后问题还是没解决,不知道哪儿没对

15945179970 发表于 2024-1-5 22:16:23

liyifeng295641 发表于 2024-1-5 22:30:50

{:10_254:}

陈勃 发表于 2024-1-9 09:16:13

育碧{:10_254:}

15945179970 发表于 2024-1-14 23:43:57

{:5_102:}

QQQAAAXXX 发表于 2024-1-27 00:04:07

Poklmn 发表于 2024-2-3 01:22:17

页: [1]
查看完整版本: 请问为什么指针不能回到文本开头?