文档章节

Python3文件对象操作

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

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
博文 79
码字总数 70749
作品 0
宁德
程序员
程序员必备,快速学习 Python 的全套14张思维导图(附高清版下载)

后台回复关键词 思维导图 可获取本文中的高清思维导图(PDF版) ML & AI∣一个有用的公众号 长按,识别二维码,加关注 获取更多精彩文章

micf435p6d221ssdld2 ⋅ 05/23 ⋅ 0

1. Python3源码—内建对象

1.1. Python内的对象 Python中的类和实例都是通过Python内的对象来实现的。Python中已经预先定义了一些类型对象。这些内建类型对象通过实例化,可以创建内建类型对象的实例对象。 在Python中...

whj0709 ⋅ 06/06 ⋅ 0

Python基础——装饰器、模块(0417)

一、Python基础——复习 1、字符串的常用操作 2、列表的常用操作 3、字典的常用操作 二、Python——装饰器:函数可以是变量 1、Python是一种面向对象的编程语言,在Python中所有的都可以是Pyt...

python初雪之路 ⋅ 04/17 ⋅ 0

python2.x和python3.x的区别

Python的3.0版本,常被称为Python3000,或简称Py3k。相对于Python的早期版本,这是一个较大的升级。 为了不带入过多的累赘,Python3.0在设计的时候没有考虑向下相容。许多针对早期Python版本...

leejia1989 ⋅ 05/30 ⋅ 0

12道必会的Python面试题,附详细讲解

无论是应聘Python方向的web开发,还是爬虫工程师,或是数据分析,还是自动化运维,都涉及到一些基础的知识!小编挑了一些Python的基础面试题,看看你能不能的答上来,也许面试的同学用的着!...

诸葛玥 ⋅ 06/16 ⋅ 0

[flask-SQLAlchemy]关于flask-SQLAlchemy的初级使用教程

鉴于网上关于flask-SQLAlchemy的实例使用教程参差不齐,于此写下工作学习过程中的使用过程,以便分享交流。 对于python关于flask有一定了解的高端玩家来说,请转至flask官方开发文档。 一.安...

yzy121403725 ⋅ 05/24 ⋅ 0

大数据分析挖掘学习方向?数据分析师的就业前景怎么样?

加米谷数据分析挖掘课程明细,从理论到云端实操环境到项目实战,手把手教您从0掌握数据分析与挖掘技术,带您走进数据时代。 第一阶段(python基础) python入门:1、Python版本特性介绍2、P...

加米谷大数据 ⋅ 04/17 ⋅ 0

Python中os与sys两模块的区别

前言 os与sys模块的官方解释如下: os: This module provides a portable way of using operating system dependent functionality. 这个模块提供了一种方便的使用操作系统函数的方法。 sys:...

xiaoge2016 ⋅ 04/22 ⋅ 0

Python是面向对象的语言吗?python编程

  Python虽然是解释型语言,但从设计之初就已经是一门面向对象的语言,对于Python来说一切皆为对象。正因为如此,在Python中创建一个类和对象是很容易的,当然如果习惯面向过程或者函数的写...

老男孩Linux培训 ⋅ 06/08 ⋅ 0

Python开发一:PyCharm教程

通过前面的Python学习笔记教程,基本已经算入门Python了,接下来为了巩固Python,此后几篇文章重点在于使用Python开发应用。 所谓好马配好鞍,Python开发已经不同于Python入门,单纯的官方解...

viatorsun ⋅ 05/11 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

对于程序员的招聘问题,作为软件人的一些吐槽和建议

作为软件人,找工作有时候似乎挺苦逼的。 说真的,让我去掉前面这句中“似乎”二字吧。就是苦逼!很多人都曾抱怨处在招聘的一方很糟糕——我们没有任何可靠的方式来甄别会写代码并且写得好的...

老道士 ⋅ 25分钟前 ⋅ 0

HDFS原理学习

一、概述 1、 Hadoop整合了众多的文件系统,首先提供了一个高层的文件系统抽象org.apache.hadoop.fs.FileSystem。然后有各个文件系统的实现类。 2、Hadoop是JAVA编写的,不同文件系统之间的交...

cjxcloud ⋅ 29分钟前 ⋅ 0

Linux下MySQL表名不区分大小写的设置方法(抄袭别人的)

Linux下MySQL表名不区分大小写的设置方法 MySQL表名不区分大小写的设置方法 在用centox安装mysql后,把项目的数据库移植了过去,发现一些表的数据查不到,排查了一下问题,最后发现是表名的大...

随风而浮沉 ⋅ 34分钟前 ⋅ 0

ubuntu下安装宋体simsun

sudo cp simsun.ttc /usr/share/fonts cd /usr/share/fonts sudo chmod 644 simsun.ttc 更新字体缓存: 代码: sudo mkfontscale 代码: sudo mkfontdir 代码: sudo fc-cache -fsv 安装chrome扩......

wangxuwei ⋅ 35分钟前 ⋅ 0

利用 ssh 传输文件

Linux 下一般可以用 scp 命令通过 ssh 传送文件: #把服务器上的 /home/user/a.txt 发送到本机的 /var/www/local_dir 目录下scp username@servername:/home/user/a.txt /var/www/local_dir...

大灰狼时间 ⋅ 46分钟前 ⋅ 0

web3j教程:android和java程序员如何使用web3j开发区块链以太坊

如何使用web3j为Java应用或Android App增加以太坊区块链支持,本教程内容即涉及以太坊中的核心概念,例如账户管理包括账户的创建、钱包创建、交易转账,交易与状态、智能合约开发与交互、过滤...

智能合约 ⋅ 今天 ⋅ 0

web3j开发java或android以太坊智能合约快速入门

web3j简介 web3j是一个轻量级、高度模块化、响应式、类型安全的Java和Android类库提供丰富API,用于处理以太坊智能合约及与以太坊网络上的客户端(节点)进行集成。 可以通过它进行以太坊区块链...

笔阁 ⋅ 今天 ⋅ 0

一起读书《深入浅出nodejs》-异步I/O

异步I/O “异步”这个名词其实很早就诞生了,但它大规模流行却是在Web 2.0浪潮中,它伴随着AJAX的第一个A(Asynchronous)席卷了Web。 为什么要异步I/O 关于异步I/O为何在Node里如此重要,这与...

小草先森 ⋅ 今天 ⋅ 0

JVM各种问题

1、如果启动什么都不设,会怎样? 先来看一个命令 [root@localhost bin]# java -XX:+PrintCommandLineFlags -version -XX:InitialHeapSize=29899008 -XX:MaxHeapSize=478384128 -XX:+PrintCo......

算法之名 ⋅ 今天 ⋅ 0

SAS笔记-宏2

宏是一种文本,一般来说其编译是在程序执行之前。 宏变量的创建 %let语句 %let macro_variables = text; %let是常见的宏变量建立方式,其编译就在执行前。如下例中,想要宏变量test等于数据集...

tonorth123 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部