侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

Python3文件对象操作

2023-12-13 星期三 / 0 评论 / 0 点赞 / 100 阅读 / 2883 字

1.实现os.walk方法(广度优先) import osdef walk(root): stack = [root] files = [] while stack:

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

import osdef 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 namedtupleProporityQueue = 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 timeimport threadingdef 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,)

 

广告 广告

评论区