第十七章:运行时特性-os:可移植访问操作系统特定特性-检查文件系统内容

本文介绍了Python的os模块如何用于跨平台地管理和操作文件系统。通过listdir(), walk()和scandir()等函数,可以实现目录内容的查看、递归遍历以及文件元数据的获取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

17.3 os:可移植访问操作系统特定特性
os模块为平台特定的模块(如posix,nt和mac)提供了一个包装器。所以平台上函数的API都应当是相同的,所以使用os模块可以提供一定的可移植行。不过,并不是所以函数在每一个平台上都可用。具体来说,这个总结中介绍的许多进程管理函数就对Windows不适用。
os模块的Python文档的子标题是"杂类操作系统接口"。这个模块主要包括用于创建和管理运行进程或文件系统内容(文件和目录)的函数,只有很少一部分涉及其他功能。

17.3.1 检查文件系统内容
要准备文件系统上一个目录的内容列表,可以使用listdir()。

import os
import sys

print(os.listdir(sys.argv[1]))

返回值是一个列表,其中包含给定目录中的所有命名成员,这里不会区分文件、子目录和符号链接。
在这里插入图片描述
函数walk()会递归地遍历一个目录。对于每个子目录,它会生成一个tuple,其中包含目录路径、该路径的直接子目录以及一个列表,这个列表包含该目录中所有文件的文件名。

import os
import sys

# If we are not given a path to list, use /tmp.
if len(sys.argv) == 1:
    root = '/tmp'
else:
    root = sys.argv[1]

for dir_name,sub_dirs,files in os.walk(root):
    print(dir_name)
    # Make the subdirectory names stand out with /.
    sub_dirs = [n + '/' for n in sub_dirs]
    # Mix the directory contents together.
    contents = sub_dirs + files
    contents.sort()
    # Show the contents,
    for c in contents:
        print('  {}'.format(c))
    print()

该示例展示了一个递归目录列表。

如果除了文件名外还需要更多信息,那么scandir()可能比listdir()更高效,扫描目录时一个系统调用可以收集更多信息。

import os
import sys

for entry in os.scandir(sys.argv[1]):
    if entry.is_dir():
        typ = 'dir'
    elif entry.is_file():
        typ = 'file'
    elif entry.is_symlink():
        typ = 'link'
    else:
        typ = 'unknow'
    print('{name} {typ}'.format(
        name=entry.name,
        typ=typ,
        ))

scandir()会为目录中的元素返回一个DirEntry实例序列。这个对象提供了很多属性和方法来访问文件的元数据。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值