免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2538 | 回复: 8
打印 上一主题 下一主题

python操作文件的问题,求帮忙 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-03-12 14:59 |只看该作者 |倒序浏览
有一个日志文件,会不断生成内容,我想用python把里面的内容逐行取出来插到数据库里,
现在我是每天半夜for log in f.readlines() 这样逐行取出来去insert.
有什么办法让他实时监控这个文件,有新内容就即时插入,没有就等待,避免重复插入。
求指点!

论坛徽章:
0
2 [报告]
发表于 2015-03-12 15:08 |只看该作者
我自己搞定了诶
f = open("d:\\123.txt",'r')
while True:
   
   for log in f.readlines():
      print log,

论坛徽章:
7
申猴
日期:2014-12-21 13:57:24巳蛇
日期:2014-12-25 22:27:08申猴
日期:2015-01-19 08:07:36辰龙
日期:2015-02-04 11:40:06处女座
日期:2015-02-04 11:40:412015年亚洲杯之卡塔尔
日期:2015-03-06 12:01:322015年亚洲杯之乌兹别克斯坦
日期:2015-03-31 13:43:57
3 [报告]
发表于 2015-03-13 14:31 |只看该作者
本帖最后由 goofool 于 2015-03-13 15:26 编辑

你这样写,如果log太大,不都把内存吃光了吗

readline不会读取全部文本
  1. def print_f(file):
  2.     while True:
  3.         line = file.readline()
  4.         if line:
  5.             yield line

  6. f = open("test.txt")
  7. for i in print_f(f):
  8.     print(i,end="")
复制代码

论坛徽章:
5
IT运维版块每日发帖之星
日期:2015-08-25 06:20:002017金鸡报晓
日期:2017-01-10 15:13:292017金鸡报晓
日期:2017-02-08 10:33:2115-16赛季CBA联赛之新疆
日期:2018-04-23 13:55:2315-16赛季CBA联赛之辽宁
日期:2018-07-23 08:59:12
4 [报告]
发表于 2015-03-13 18:09 |只看该作者
你要先判断文档是否增加了。。不然肯定耗死内存,,

论坛徽章:
0
5 [报告]
发表于 2015-03-13 21:10 |只看该作者
import signal
import sys

def print_file(file):
    while True:
        line = file.readline()
        if line:
            yield line

def sig_handler(sig, frame):
    # print sig, ":", frame
    # write back the latest offset
    f = open('counter', 'w')
    f.write(str(length))
    print length
    f.close()
    sys.exit(1)


signal.signal(signal.SIGINT, sig_handler)

length = 0
try:
    # get the offset of last read
    f = open('counter')
    line= f.readline()
    f.close()
    if line:
        length = int(line)
    else:
        length = 0
except IOError as e:
    length = 0


f = open('data.txt')
f.seek(length)
for i in print_file(f):
    print i
    length += len(i)
f.close()

论坛徽章:
0
6 [报告]
发表于 2015-03-24 09:39 |只看该作者
goofool 发表于 2015-03-13 14:31
你这样写,如果log太大,不都把内存吃光了吗

readline不会读取全部文本

多谢大神,我google一下yield这个东西

论坛徽章:
0
7 [报告]
发表于 2015-03-24 09:51 |只看该作者
回复 5# cuteorange


    这个是计算行数 然后打印的吧 python readlines就是按行号打印的么?比如当前文件有10行 全部读完清空文件 readlines会从11行开始读,是这样么?

论坛徽章:
0
8 [报告]
发表于 2015-03-24 09:54 |只看该作者
回复 5# cuteorange


    这个是计算行数 然后打印的吧 python readlines就是按行号打印的么?比如当前文件有10行 全部读完清空文件 readlines会从11行开始读,是这样么?

论坛徽章:
0
9 [报告]
发表于 2015-03-28 11:05 |只看该作者
luoyonghao 发表于 2015-03-24 09:54
回复 5# cuteorange

把上次已经读了的行数记下来
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP