文件处理一直在路上

作者: 叫我小包总 | 来源:发表于2019-01-04 23:49 被阅读1次

    一直输出python干货,是我开这个公众号的初衷,我会把这条道路坚持走到底,也希望我写的东西对你有一点作用。我把自己每天学习python时遇到的各种问题记录下来,分享给大家,避免入门的小伙们入门走弯路。

    1. from __future__ import division

    导入未来的支持语言特征中division(精确除法),当我们在程序中没有导入该特征时,“/”操作符执行的只能是整除,也就是取整数,只有当我们导入division(精确算法)以后,“/”执行的才是精确算法。

    那么,上面这段话是什么意思呢?我们用一个例子来解释一下。

    Python里的除号默认是整除

    3/2

    1

    那么,加上了上面那一段后,除号就变成了正常的小数除法了

    from __future__ import division

    print(3/2)

    1.5

    2.文件处理入门

    如何统计某一路径下文件夹和文件?比如,我的电脑上安装的是python3.7,那么搜索整个py3.7下面的所有目录(包括子目录),里面的所有的文件。

    根据题目要求,先把目录下的全部文件和目录列出,若是子目录,就继续寻找该目录下的子文件,然后不断重复刚才的过程,因为我们不知道有多少层嵌套的子目录,最好用递归。

    大家先看一下我写的代码。

    #列出目录下所有的文件和子目录内的文件def listFiles(path='.'):    #传入路径,默认值为当前目录

        if not os.path.exists(path):   #判断是否有效目录

            print('path error')

    return None

        file=' '

    try:

    for file in os.listdir(path):  #列出目录下所有文件和目录

                filepath=os.path.join(path,file)  #构造全路径文件

                if os.path.isdir(filepath):   #判断是否为目录

                    print(filepath)    #打印目录

                    listFiles(path=filepath)   #继续递归子目录

                elif os.path.isfile(filepath):  #判断是否为文件

                    print(filepath)

    getFileSize(filepath)    #获得文件大小

        except TypeError:   #若出错,打印出错的文件

            print(file)

    第二中解法有点骚,大家也看看:

    import os

    DIR

    = 'D:/Program Files/python37'    #要统计的文件夹print('dirnum:',len([name for name in os.listdir(DIR) if os.path.isdir(os.path.join(DIR,name))]))

    print('filenum:',len([name for name in os.listdir(DIR) if os.path.isfile(os.path.join(DIR,name))]))

    #打开文件path = 'D:/Program Files/python37'

    dirs = os.listdir(path)

    #输出所有文件和文件夹for file in dirs:

    print(file)

    Python中对文件系统的访问大多是通过os模块实现的,我们需要熟练掌握,通过编写上面的代码,总结一下常见的用法和技巧。

    (1)文件路径的处理

    假设有一个文件路径

    path='/users/Python/Data/info.txt'

    1)获得路径

    printos.path.dirname(path)

    >>/users/Python/Data

    2)分割文件名

    printos.path.basename(path)

    >>info.txt

    3)分割文件的后缀

    printos.path.split(path)

    >>('/users/Python/Data','info.txt')

    (2)判断是否为文件或者目录

    在文件处理的时候,特别是递归处理目录下的多个文件或者嵌套子目录的时候,要先判断一下这个是文件还是目录。

    举例说明,假设我们有一个这样的目录结构:

    |---test01--------

    |---test02--------

    |---demo_file.py—

    判断是否为文件

    printos.path.isfile('test01')

    >>False

    printos.path.isfile('demo_file.py')

    >>True

    判断是否为目录

    printos.path.isdir('test01')

    >>True

    判断文件或者目录是否存在

    printos.path.exists('demo_file.py')

    >>True

    printos.path.exists('test01')

    >>True

    细心的小伙伴们还注意到上面例子的代码中还涉及异常处理,这部分的内容我放到下次再详细介绍,现在我们刚刚入门,不要贪多,应该稳扎稳打。

    相关文章

      网友评论

        本文标题:文件处理一直在路上

        本文链接:https://www.haomeiwen.com/subject/anmlrqtx.html