鱼C论坛

 找回密码
 立即注册
查看: 8297|回复: 23

[已解决]怎么判断文件是否读取到了最后一行

[复制链接]
发表于 2016-11-9 10:17:30 | 显示全部楼层 |阅读模式

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

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

x
如题。
使用for each循环找文件的时候,怎么判断当前行是不是最后一行
最佳答案
2016-11-10 19:51:28
文件名1.txt的内容是:
  1. 111
  2. 222
  3. 333
  4. 444
  5. 555
  6. 666
  7. 777
  8. 888
  9. 999
复制代码

程序如下:
  1. with open('1.txt') as f:
  2.     each =None
  3.     for temp in f:
  4.         if each != None:
  5.             print(each, end = '')
  6.         each = temp
  7.     print('这是最后一行', each)
  8.         
  9.         
复制代码


结果:
  1. 111
  2. 222
  3. 333
  4. 444
  5. 555
  6. 666
  7. 777
  8. 888
  9. 这是最后一行 999
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-11-9 13:17:11 | 显示全部楼层
求解答~~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-9 14:00:45 | 显示全部楼层
真个完整的语句应该是for each in 字符串或其他形式列表,所以遍历到最后一个单词的时候程序是自己可以判定是否是最后一个单词的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-9 14:16:19 | 显示全部楼层
小茗同学 发表于 2016-11-9 14:00
真个完整的语句应该是for each in 字符串或其他形式列表,所以遍历到最后一个单词的时候程序是自己可以判定 ...

嗯嗯嗯
我的意思是,最后一行我需要做处理,但是 在 for each in file里面我不知道用啥判断条件来判断现在是不是最后一行。这个怎么判断呢?
谢谢啦~~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-9 14:57:28 | 显示全部楼层

具体的我也不是很明白,这有一个代码,文件如果不是最后一行就加another,如果是最后一行就直接打印,希望能帮助到你
  1. buffer_line = None
  2. for line in file:
  3.     #打印这一行的上一行
  4.     if buffer_line != None:
  5.         print(buffer_line,'another')
  6.     buffer_line = line

  7. #处理最后一行
  8. process(buffer_line)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

 楼主| 发表于 2016-11-9 17:25:00 | 显示全部楼层
小茗同学 发表于 2016-11-9 14:57
具体的我也不是很明白,这有一个代码,文件如果不是最后一行就加another,如果是最后一行就直接打印,希 ...

process(buffer_line)
这句是啥意思呀~~~


谢谢啦~~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-9 17:48:01 | 显示全部楼层
用while吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-9 19:19:48 | 显示全部楼层
#打开文件
#获取最后一行的文本 line[-1]

file = open("E:\\ex\\hehe.txt",'r')
for each in file:
        line.append(each)

line[-1] =.....
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2016-11-9 19:34:14 | 显示全部楼层
蛋炒饭妖妖 发表于 2016-11-9 17:25
process(buffer_line)
这句是啥意思呀~~~

这肯定是在调用一个自定义的函数
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-9 19:36:43 | 显示全部楼层
将文件逐行放到一个列表中(一行一个元素),在列表最后一个元素中操作之后再打印,ok?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-10 08:34:01 | 显示全部楼层

while 怎么判断啊
问题就是我不知道判断最后一行的判断条件是什么
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-10 08:34:40 | 显示全部楼层
jackie-L 发表于 2016-11-9 19:36
将文件逐行放到一个列表中(一行一个元素),在列表最后一个元素中操作之后再打印,ok?

实在不知道怎么判断,这个也是可以的~~

谢谢啦~~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-10 09:14:44 | 显示全部楼层
又来学习的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-10 09:41:38 | 显示全部楼层
笨方法:先把所有行放到一个list,取出最后一行。再拿每一行的值和最后一行比较。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-10 09:44:29 | 显示全部楼层
jll421740865 发表于 2016-11-10 09:41
笨方法:先把所有行放到一个list,取出最后一行。再拿每一行的值和最后一行比较。

这也是个办法

谢谢啦~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-10 14:14:57 | 显示全部楼层
蛋炒饭妖妖 发表于 2016-11-10 09:44
这也是个办法

谢谢啦~

关键还是要你的文件有什么特征没有,如果有特征还可以用find('\n')换行符的方法找到最后一个'\n',这个方法也可以找最后一行
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-10 15:29:09 | 显示全部楼层
jackie-L 发表于 2016-11-10 14:14
关键还是要你的文件有什么特征没有,如果有特征还可以用find('\n')换行符的方法找到最后一个'\n',这个 ...

但是如果最后一行就是普通的字符串,也没有换行的话,是不是就找不到了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-10 16:50:34 | 显示全部楼层
蛋炒饭妖妖 发表于 2016-11-10 15:29
但是如果最后一行就是普通的字符串,也没有换行的话,是不是就找不到了

你问的很好我又上代码演示一下,你可以加我q。q  3062085我是才学这个半个月大家一起交流进步快些

  1. >>> a = '165ab\nc1616\n1615616\n1abc6116\n16516abc16165484'
  2. >>> a.rfind('\n')
  3. 28
  4. >>> a[28:]
  5. '\n16516abc16165484'
  6. >>>
复制代码

我直接上rfind就把最后一个‘\n’在文件中的位置找出来,再用切片,把最后一段弄出来了。
还有一种情况就是文件最后有个‘\n’该怎么办了,我又想了个办法
  1. >>> a = '165ab\nc1616\n1615616\n1abc6116\n16516abc16165484\n'
  2. >>> a.rfind('\n')
  3. 45
  4. >>> a.rfind('\n',0,44)
  5. 28
  6. >>> a[28:45]
  7. '\n16516abc16165484'
  8. >>>
复制代码
上代码
这样不是搞出来了啊
你需要再用一个
if a[a.rfind] == '\n' :
     上面的代码
else:
      第一种方法
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-10 19:41:26 | 显示全部楼层
学习了!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-10 19:51:28 | 显示全部楼层    本楼为最佳答案   
文件名1.txt的内容是:
  1. 111
  2. 222
  3. 333
  4. 444
  5. 555
  6. 666
  7. 777
  8. 888
  9. 999
复制代码

程序如下:
  1. with open('1.txt') as f:
  2.     each =None
  3.     for temp in f:
  4.         if each != None:
  5.             print(each, end = '')
  6.         each = temp
  7.     print('这是最后一行', each)
  8.         
  9.         
复制代码


结果:
  1. 111
  2. 222
  3. 333
  4. 444
  5. 555
  6. 666
  7. 777
  8. 888
  9. 这是最后一行 999
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-21 12:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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