Python 知识量:10 - 41 - 150
文件通常存储在硬盘、U盘等存储设备中,是一个命名的比特集合。文件可以分为:文本文件和二进制文件。文本文件可以视为存储在硬盘中的一系列字符串;二进制文件指文本文件之外的文件,例如:图像、音频、视频等文件。
文本文件具有以下特点:
通常由字符串构成,例如:Python源代码文件、HTML文件等。
可以使用文本编辑器查看和编辑,对人的阅读和修改比较友好。
对程序来说不太友好,读写需要额外的分析程序。
通常比等价的二进制文件大。
二进制文件具有以下特点:
对人的使用不友好,无法通过文本编辑器查看修改,在编辑器中是一堆乱码。如果要查看二进制文件,需要特定程序或工具,例如:通过图片软件打开图片文件。
通常比等价的文本文件小,因为二进制文件不需要逗号、空格等分隔符,存储空间利用率更高。
对程序友好,程序在计算机中本来就是以二进制形式运行的,二进制文件使用时不需要进行复杂的解析过程。
与特定程序密切关联,特定格式的数据只有对应的程序可以使用。
在文件系统中,除了文件,还有文件夹的概念。实际上,文件夹代表的就是目录。文件夹(目录)结构通常比较庞大和复杂,有层次结构。
路径名用于标识文件或文件夹的名称。例如在Windows系统中的某个文件夹的路径名可能为:D:\PythonTestFile。Windows系统路径名使用反斜杠(\)来分割各文件夹或文件的名称,并以盘符(D:)打头;Linux系统中的路径名则以斜杠(/)来分割,也不使用盘符打头。
当前工作目录是一个重要的概念,通常指默认目录,是系统目前执行的位置。在操作文件或文件夹时,如果仅给出其名称,没有指定完整路径名,Python就会使用当前工作目录中的对应文件或文件夹。
Python提供了许多用于查看文件和文件夹信息的函数,如下所示:
函数名 | 功能说明 |
---|---|
os.getcwd() | 返回当前工作目录名称。 |
os.listdir(p) | 返回一个字符串列表,其中包含路径p指定的文件夹中所有文件和文件夹的名称。 |
os.chdir(p) | 将当前工作目录设置为路径p |
os.path.isfile(p) | 当路径p指向的是一个文件时返回True,否则返回False。 |
os.path.isdir(p) | 当路径p指向的是一个文件夹时返回True,否则返回False。 |
os.stat(fname) | 返回fname的信息,例如:大小、最后一次修改时间等。 |
下面是一些应用示例。
1、获取当前工作目录中的文件和文件夹。
# list.py import os def l_cwd(): return os.listdir(os.getcwd())
运行结果为:
>>> ====================== RESTART: D:\PythonTestFile\list.py ====================== >>> l_cwd() ['continue.py', 'done.py', 'list.py', 'local.py', 'match.py', 'multiplication.py', '__pycache__']
可以通过列表解析来识别文件和文件夹,分别打印:
# list.py import os def l_cwd(): return os.listdir(os.getcwd()) def file_cwd(): print([p for p in l_cwd() if os.path.isfile(p)]) def folder_cwd(): print([p for p in l_cwd() if os.path.isdir(p)])
运行结果为:
>>> ====================== RESTART: D:\PythonTestFile\list.py ====================== >>> file_cwd() ['continue.py', 'done.py', 'list.py', 'local.py', 'match.py', 'multiplication.py'] >>> folder_cwd() ['__pycache__']
2、获取.py文件。
# list.py import os def get_py(path=None): if path==None: path=os.getcwd() else: os.chdir(path) #修改当前工作目录 path=os.getcwd() print([fname for fname in os.listdir(path) if os.path.isfile(fname) if fname.endswith('.py')])
运行结果为:
>>> ====================== RESTART: D:\PythonTestFile\list.py ====================== >>> get_py() ['continue.py', 'done.py', 'list.py', 'local.py', 'match.py', 'multiplication.py'] >>> get_py('D:\Python38\Lib\collections') ['abc.py', '__init__.py']
函数get_py()接受一个路径参数,默认是None,这时指向当前工作目录。如果给出了特定路径,则通过os.chdir()函数修改当前工作目录,指向特定路径。函数体中,通过列表解析筛选出.py文件并打印。
3、返回当前工作目录中所有文件的大小总和。
# list.py import os def l_cwd(): return os.listdir(os.getcwd()) def file_cwd(): return [p for p in l_cwd() if os.path.isfile(p)] def size_in_bytes(f): return os.stat(f).st_size def get_size(): print(sum(size_in_bytes(f) for f in file_cwd()))
运行结果为:
>>> ====================== RESTART: D:\PythonTestFile\list.py ====================== >>> get_size() 1668
以上的代码中使用了大量的函数,函数间通过相互调用实现功能。推荐这样的编码方式,因为,这让程序更加简洁、易于理解和维护,并且可以重复使用。
Copyright © 2017-Now pnotes.cn. All Rights Reserved.
编程学习笔记 保留所有权利
MARK:3.0.0.20240214.P35
From 2017.2.6