文档章节

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,)

 

© 著作权归作者所有

共有 人打赏支持
夏洛特_
粉丝 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数据存储--JSON

HTML正文存储为两种格式:JSON和CSV。 存储为JSON: 首先利用Requests访问http://seputu.com获取HTML文档: 取每章节 接下来将数据存储为JSON。 python对JSON文件的操作分为编码和解码,通过...

guguobao
08/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

redis-list

列表用来存储多个有序的字符串,列表中元素是可以重复的,最多可以存储2^32-1个元素 常用命令: lrange key start end 获取指定范围内的元素列表,索引从0开始 0,-1取出所有的元素 lindex k...

拐美人
39分钟前
0
0
AOSP Build System —— Soong

Soong Soong is the replacement for the old Android make-based build system. It replaces Android.mk files with Android.bp files, which are JSON-like simple declarative descriptio......

雪落青山
56分钟前
2
0
Unity C# lock关键字的坑

Unity 5.6 环境下的 lock关键字,在特定的多线程环境下会死锁 崩溃 其中一种情况: 异步socket 操作,由于内部是一个线程池回调的异步回调,操作同一个对象时 lock关键字会概率出现死锁 闪退...

梦想游戏人
今天
2
0
简单的svm例子

数据来源:https://github.com/oumiga1314/Coursera-ML-AndrewNg-Notes/blob/master/code/ex6-SVM/data/ex6data1.mat import pandas as pd import numpy as np import scipy.io as sio impor......

南桥北木
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部