鱼C论坛

 找回密码
 立即注册
查看: 1681|回复: 13

[已解决]新手文件问题

[复制链接]
发表于 2021-6-22 08:27:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

4

6

8
问题为什么单行都不见了
最佳答案
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: 读写文件的方式,基本是固定,你不用自己发明。
另外,官方文档有很好的例子,自己实现和熟悉几下,就好了。


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-22 09:12:57 | 显示全部楼层
  1. f = open('a.txt')
  2. while f:
  3.     print(f.readline())
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-22 09:18:06 | 显示全部楼层
试了一下怎么是死循环了呢
输出
Process finished with exit code -1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-22 13:57:41 | 显示全部楼层
  1. f = open('a.txt')
  2. for _ in f:
  3.     print(_,end='')
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-22 16:09:28 | 显示全部楼层
f = open("123.txt","r",encoding="utf8")
# print(f.read())
for i in range(8):
    print(f.readline())
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-22 16:33:19 | 显示全部楼层
谢谢回答。我只想知道为什么用我的方法单数行就不见了。用小甲鱼教的
for each_line in f:
     print(each_line)
也可以得到答案
上面的方法哪里有问题呢。


      
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-22 18:30:10 | 显示全部楼层
for _ in f:
    print(f.readline())
进循环的时候 _就读取了文件中的第一行,所以,print(f.readline())因为第一行已经读过了所以读取第二行,第二次循环_应该要读第二行,但第二行被读过了,所以读第三行...
emmmm,同为小白,个人理解,仅供参考
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-22 18:56:58 | 显示全部楼层
还是不懂。不是一行一行的读吗?怎么就读过了呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-22 19:05:34 | 显示全部楼层
谢谢大家回答我的问题。逃兵同学用的跟小甲鱼课上讲的一样的方法。litao59同学你怎么就事先知道有8行呢。我只想知道为什么用readline()就会把单行都读没了。那我以后还怎么敢用readline()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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: 读写文件的方式,基本是固定,你不用自己发明。
另外,官方文档有很好的例子,自己实现和熟悉几下,就好了。


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-23 10:24:32 | 显示全部楼层
  1. f = open('a.txt')
  2. # 这里for 循环读取了一行文件,但是没有打印
  3. for _ in f:
  4.     # 如果想打印for循环读取的文件应该在这里写:
  5.     print(_)
  6.     # 这里f.readline()又读取了一行文件并且通过 print 打印了出来
  7.     print(f.readline())
复制代码


python 的文件读写你可以想象成文件对象内部有一个游标在操作,
不管你用任何方法读取一行文件都会使光标下移一行,并且不会自动回位,只能手动使用seek方法调整游标位置。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

确实的说 readline 在实际应用中用到的次数并不多,可以说少的可凉。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-23 18:59:06 | 显示全部楼层
似乎有点懂了。主要是指针的问题原来不知道。不过还是不是十分懂。为什么不是1,3,5,7而是2,4,6,8呢。先从第一行读然后指针转到第二行。再读就变第3行不是这样吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-23 19:09:20 | 显示全部楼层
好像明白了for _ in f:这一句本身就是读了一行并且把指针跳到下一行了。然后f.readline()就是读的2然后for _ in f又读了第三行并且把指针跳到第4行。所以f.readline()打出的是第4行。以此类推。谢谢各位大神回答我的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-21 21:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表