我们每天都与文件打交道,文件存储着我们的数据,记录着我们的心情,甚至承载着我们未来的梦想!不过,不是每次都能手动打开文件夹、点击文件。有时,我们需要在代码中来一波操作系统“文件魔术”。那么,如何在Python程序里像操作文件一样“玩转”操作系统呢?那就必须得用到 os 模块!

 

b53754725ba3a559785c4f924793e0e1.jpeg

 

一、什么是os模块?

os 模块是 Python 自带的神奇工具,专门用来操作文件、目录,甚至跟操作系统互动。不需要你再手动输入一大堆操作系统命令,所有的命令行功能都能通过 Python 完成。今天,我们就来聊聊如何通过 os 模块和一些操作系统的接口函数,用代码替代繁琐的鼠标点击。

二、看看你正在用哪个操作系统

首先,我们可以使用 os 模块来判断当前操作系统是什么。这个功能看似简单,但却能为接下来的操作奠定基础。

pythonimport os
# 获取操作系统类型print(os.name)

 

  • 如果返回 posix,那就是 Linux、Unix 或者 Mac。

  • 如果是 nt,那就是 Windows 系统。

三、操作系统信息一手掌握

想要查看系统更详细的信息?直接调用 os.uname()(不过,这个在 Windows 上不适用):

pythonimport os
print(os.uname())

 

它会返回一个包含系统信息的元组,像是你电脑的名字、操作系统版本、机器类型等,简直就是“全家福”!不过,Windows 用户请自觉忽略这部分内容哦。

四、环境变量大揭秘

操作系统中定义的环境变量,保存着一些关于你系统的信息,os.environ 就是这个“藏宝图”。通过它,你可以轻松查看和操作环境变量:​​​​​​​

pythonimport os
# 查看所有环境变量print(os.environ)
# 获取某个特定环境变量的值print(os.environ.get('PATH'))

 

如果你查询某个不存在的环境变量,它会返回 None。不过,你可以设置默认值来避免这个情况:​​​​​​​

pythonprint(os.environ.get('x', 'default'))  # 如果没有'x',就返回'default'

 

五、操作文件和目录——Python的“魔法棒”

1. 文件路径的正确拼接

别傻乎乎地手动拼接路径,os.path 模块提供了 join(),专门来帮助你跨平台拼接路径:​​​​​​​

pythonimport os
# 拼接路径(适配不同系统)print(os.path.join('/home/user', 'folder', 'file.txt'))

 

Linux/Mac 下会输出:/home/user/folder/file.txt
Windows 下会输出:C:\home\user\folder\file.txt

2. 获取当前目录的绝对路径

有时候你需要确认自己当前在哪个目录,使用 os.path.abspath() 来获取当前路径的绝对路径:​​​​​​​

pythonimport os
# 获取当前目录的绝对路径print(os.path.abspath('.'))

 

3. 创建和删除目录

创建新目录,删除目录?os 模块也能搞定:​​​​​​​

python# 创建目录os.mkdir('/path/to/new_dir')
# 删除目录os.rmdir('/path/to/new_dir')

 

4. 轻松获取文件扩展名

想要快速获得文件的扩展名?用 os.path.splitext() 就能搞定:​​​​​​​

pythonimport os
# 获取文件扩展名print(os.path.splitext('file.txt'))

 

返回值是一个元组:文件路径和扩展名。方便吧?

5. 重命名和删除文件

文件不想要了,或者想改个名字?os.rename() 和 os.remove() 可以轻松搞定。​​​​​​​

python# 重命名文件os.rename('old_name.txt', 'new_name.txt')
# 删除文件os.remove('new_name.txt')

 

六、文件复制——哪里没有os,哪里就有shutil

如果你想复制文件,os 模块帮不了你。它没有提供复制文件的功能。不过,幸运的是,Python的 shutil 模块可以提供 copyfile() 函数来帮助你轻松复制文件:​​​​​​​

pythonimport shutil
# 复制文件shutil.copyfile('source.txt', 'destination.txt')

 

七、列出当前目录的所有文件和目录

想要快速列出某个目录下的文件和子目录吗?用 os.listdir() 就能轻松实现。要注意,它返回的是文件和目录的名字(而非路径),所以你可以结合 os.path.isdir() 来筛选目录,或者结合 os.path.splitext() 来筛选文件类型。​​​​​​

python# 列出所有目录print([x for x in os.listdir('.') if os.path.isdir(x)])
# 列出所有.py文件print([x for x in os.listdir('.') if os.path.isfile(x) and os.path.splitext(x)[1] == '.py'])

 

一行代码,轻松搞定所有文件和目录的过滤操作!

* 小结

  • os 模块让你在 Python 中轻松操作系统的文件和目录,极大地提高了开发效率。

  • 使用 os.path 和 os 模块中的其他函数,你可以实现路径拼接、目录创建、文件操作等常见任务。

  • shutil 模块是 os 模块的好帮手,提供了文件复制等额外功能。

上机题目

  1. 题目 1:编写一个 Python 程序,模拟 dir -l 输出,列出当前目录下的所有文件和子目录,并显示每个文件的大小、最后修改时间和权限等信息。

  2. 题目 2:编写一个 Python 程序,遍历当前目录及其所有子目录,查找文件名包含指定字符串的文件,并输出相对路径。

  3. 题目 3:编写一个程序,将当前目录下所有 .txt 文件的内容复制到一个新的目录中,目录名称为 txt_files_backup

答案示例

题目 1:模拟 dir -l 输出​​​​​​​

pythonimport osimport time
for item in os.listdir('.'):    path = os.path.join('.', item)    if os.path.isdir(path):        print(f'{item}/  <DIR>  {time.ctime(os.path.getmtime(path))}')    else:        print(f'{item}  <FILE>  {os.path.getsize(path)} bytes  {time.ctime(os.path.getmtime(path))}')

 

题目 2:查找包含指定字符串的文件​​​​​​​

pythonimport os
def find_files(keyword):    for root, dirs, files in os.walk('.'):        for file in files:            if keyword in file:                print(os.path.relpath(os.path.join(root, file)))
find_files('example')

 

题目 3:复制 .txt 文件到新目录​​​​​​​

pythonimport osimport shutil
# 创建备份目录os.makedirs('txt_files_backup', exist_ok=True)
# 遍历当前目录,复制所有.txt文件for file in os.listdir('.'):    if file.endswith('.txt'):        shutil.copy(file, 'txt_files_backup')
print('备份完成!')

 

就这样,文件和目录操作变得又简单又有趣!快来动手试一试吧!

 

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐