文档章节

Python3文件对象操作

夏洛特_
 夏洛特_
发布于 2016/11/03 19:33
字数 316
阅读 8
收藏 1

1.实现os.walk方法(广度优先)

import os
def walk(root):
    stack = [root]
    files = []
    while stack:
        cur = stack.pop()
        for x in os.scandir(cur):
            if x.is_dir():
                stack.append(x.path)
            else:
                files.append(x.path)
    return files

2.实现一个优先队列,由用户指定比较函数

from collections import namedtuple


ProporityQueue = namedtuple('ProporityQueue', ['add', 'pop'])

def priority_queue_factory(cmp=None):
    def default_cmp(a, b):
        if a > b:
            return 1
        if a == b:
            return 0
        return -1
    if cmp is None:
        cmp = default_cmp
    
    data = []
    def add(e):
        idx = len(data)
        data.append(e)
        parent_idx = (idx - 1) // 2
        while parent_idx >= 0:
            #if data[idx] > data[parent_idx]:
            if cmp(data[idx], data[parent_idx]) > 0:
                data[parent_idx], data[idx] = data[idx], data[parent_idx]
                idx = parent_idx
                parent_idx = (idx - 1) // 2
            else:
                break
    
    def pop():
        if not data:
            return None
        if len(data) == 1:
            return data.pop()
        idx = 0
        ret = data[idx]
        data[idx] = data.pop()
        left_idx = 2 * idx + 1
        rigth_idx = left_idx + 1
        while left_idx < len(data):
            child_idx = left_idx
            #if rigth_idx < len(data) and data[rigth_idx] > data[left_idx]: # 存在右子节点 并且 右子节点大于左子节点
            if rigth_idx < len(data) and cmp(data[rigth_idx], data[left_idx]) > 0:
                child_idx = rigth_idx
            #if data[idx] < data[child_idx]:
            if cmp(data[idx], data[child_idx]) < 0:
                data[idx], data[child_idx] = data[child_idx], data[idx]
                idx = child_idx
                left_idx = 2 * idx + 1
                rigth_idx = left_idx + 1
            else:
                break
        return ret
    
    return ProporityQueue(add, pop)

3.实现tail -f的功能

import time
import threading

def tailf(path):
    offset = 0
    event = threading.Event()
    try:
        while not event.is_set():
            with open(path) as f:
                if offset > os.stat(path).st_size:
                #if offset > len(f)
                    offset = 0
                f.seek(offset)
    #             for line in f:
    #                 yield line
                yield from f
                offset = f.tell()
            event.wait(0.1)
    except KeyboardInterrupt:
        event.set()
        
for x in tailf('utf8.txt'):
    print(x,)

 

© 著作权归作者所有

共有 人打赏支持
上一篇: cacti 详解
下一篇: Python3类
夏洛特_
粉丝 2
博文 80
码字总数 72279
作品 0
宁德
程序员
私信 提问
python中cPickle用法例子分享

python中cPickle用法例子。 在python中,一般可以使用pickle类来进行python对象的序列化,而cPickle提供了一个更快速简单的接口,如python文档所说的:“cPickle -- A faster pickle”。 cP...

mysoftsky
2014/01/10
0
0
zg手册 之 python2.7.7源码分析(1)-- python中的对象

源代码主要目录结构 Demo: python 的示例程序 Doc: 文档 Grammar: 用BNF的语法定义了Python的全部语法,提供给解析器使用 Include: 头文件,在用c/c++编写扩展模块时使用 Lib: Python自...

东昕
2014/07/08
0
0
简单比较Python的数据持久化操作

转自http://smartzxy.iteye.com/blog/680431 简单比较Python的数据持久化操作(一) 最近喜欢上了Python,喜欢它的简洁高效,喜欢它的“无所不能”。 Python的数据持久化操作主要是六类:普通...

alazyer
2014/05/28
0
0
Python源码剖析--Pyc文件解析

PyCodeObject与Pyc文件 通常认为,Python是一种解释性的语言,但是这种说法是不正确的,实际上,Python在执行时,首先会将.py文件中的源代码编译成Python的byte code(字节码),然后再由Pyt...

renwofei423
2011/05/27
0
0
Python基础总结成千行代码,让Python入门更简单!

只要学会这千行代码,不管你是零基础还是弱基础或是没有接触过编程,都可以快速入门Python!当时我就不信邪啊,等我看完之后,即使作为一个Python老鸟了,还是领会到了很多教授他的独特见解!...

糖宝lsh
09/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

SpringBoot 整合异步调用方法

1. 在 SpringBoot 主类上使用 @EnableAsync 注解,开启异步调用功能 package com.codingos.springbootdemo;import org.springframework.boot.SpringApplication;import org.springfra......

北漂的我
22分钟前
0
0
0015-如何使用Sentry管理Hive外部表权限

1.文档编写目的 本文档主要讲述如何使用Sentry对Hive外部表权限管理,并基于以下假设: 1.操作系统版本:RedHat6.5 2.CM版本:CM 5.11.1 3.集群已启用Kerberos和Sentry 4.采用具有sudo权限的...

Hadoop实操
32分钟前
1
0
边缘计算与数据中心的发展趋势

导读 Gartner研究表明,人工智能、物联网和5G助力下一代商业创新,由此产生大量数据,2020年前企业将使用超过75亿台联网设备。 在几乎每个方面,社会的节奏都正变得更快。我们希望客户服务问...

问题终结者
45分钟前
4
0
toString();

package com.atguigu.java1; import java.util.Date; /** * toString()的使用: * * 1.java.lang.Object类中toString()定义如下: * public String toString() { return getClass().getName......

architect刘源源
今天
1
3
不可不说的Java“锁”事

前言 Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率。本文旨在对锁相关源码(本文中的源码来自JDK 8)、使用场景进行举例,为读者介绍主流锁的知识点...

Java干货分享
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部