OS 模块常用方法

Python 的 os 和 os.path 模块提供了许多用于与操作系统交互的函数,包括文件和目录的管理。下面是一些常用函数的示例和解释,以及如何使用它们:

1. os.getcwd()

获取当前工作目录。

import os

current_directory = os.getcwd()
print(f"Current working directory: {current_directory}")

2. os.chdir(path)

改变当前工作目录到指定的路径。

import os

os.chdir('/path/to/new/directory')
new_directory = os.getcwd()
print(f"Changed working directory to: {new_directory}")

3. os.listdir(path)

列出指定目录下的所有文件和目录。

import os

files_in_directory = os.listdir('/path/to/directory')
for file in files_in_directory:
    print(file)

4. os.path.exists(path)

检查路径是否存在。

import os

path = '/path/to/file'
if os.path.exists(path):
    print("Path exists.")
else:
    print("Path does not exist.")

5. os.path.isfile(path)

检查路径是否为文件。

import os

path = '/path/to/file'
if os.path.isfile(path):
    print("It is a file.")
else:
    print("It is not a file.")

6. os.path.isdir(path)

检查路径是否为目录。

import os

path = '/path/to/directory'
if os.path.isdir(path):
    print("It is a directory.")
else:
    print("It is not a directory.")

7. os.path.join(path1, path2, ...)

将多个路径片段组合成一个完整的路径。

import os

directory = '/path/to'
filename = 'file.txt'
full_path = os.path.join(directory, filename)
print(f"Full path: {full_path}")

8. os.path.split(path)

将路径分割为目录和文件名。

import os

path = '/path/to/file.txt'
directory, filename = os.path.split(path)
print(f"Directory: {directory}, Filename: {filename}")

9. os.path.basename(path)

返回路径中的文件名部分。

import os

path = '/path/to/file.txt'
basename = os.path.basename(path)
print(f"Base name: {basename}")

10. os.path.dirname(path)

返回路径中的目录部分。

import os

path = '/path/to/file.txt'
dirname = os.path.dirname(path)
print(f"Directory name: {dirname}")

11. os.path.splitext(path)

将路径分割为主文件名和扩展名。

import os

path = '/path/to/file.txt'
filename, extension = os.path.splitext(path)
print(f"Filename: {filename}, Extension: {extension}")

12. os.path.abspath(path)

返回路径的绝对形式。

import os

path = 'file.txt'
abs_path = os.path.abspath(path)
print(f"Absolute path: {abs_path}")

13. os.path.normpath(path)

规范化路径,消除多余的斜杠和符号链接。

import os

path = '/path//to///file.txt'
normalized_path = os.path.normpath(path)
print(f"Normalized path: {normalized_path}")

14. os.path.expanduser(path)

将路径中的 ~ 和 ~user 替换为用户的家目录。

import os

path = '~/Documents'
expanded_path = os.path.expanduser(path)
print(f"Expanded path: {expanded_path}")

15. os.path.getsize(path)

返回文件的大小(以字节为单位)。

import os

path = '/path/to/file.txt'
size = os.path.getsize(path)
print(f"File size: {size} bytes")

16、os.mkdir(path)

创建一个目录。如果目录的父级不存在,则会抛出异常。

import os

path = "new_directory"
try:
    os.mkdir(path)
    print(f"Directory '{path}' created.")
except FileExistsError:
    print(f"Directory '{path}' already exists.")
except Exception as e:
    print(f"Failed to create directory: {e}")

17、os.makedirs(path)

递归创建多级目录。如果任何中间级别的目录或目标目录已经存在,不会抛出异常。

import os

path = "new_directory/subdirectory"
os.makedirs(path, exist_ok=True)
print(f"Directories created: {path}")

18、os.rmdir(path)

删除空目录。如果目录不为空或不存在,会抛出异常。

import os

path = "new_directory"
try:
    os.rmdir(path)
    print(f"Directory '{path}' removed.")
except OSError:
    print(f"Directory '{path}' is not empty or does not exist.")

19、os.removedirs(path)

递归删除多级空目录。如果目录不为空,会停止删除过程。

import os

path = "new_directory/subdirectory"
os.removedirs(path)
print(f"Directories removed: {path}")

20、os.listdir(path)

列出指定目录下的所有文件和目录名。

import os

path = "."
files = os.listdir(path)
print(f"Files in '{path}': {files}")

21、os.path.exists(path)

检查路径是否存在。

import os

path = "/path/to/some/file.txt"
if os.path.exists(path):
    print(f"Path '{path}' exists.")
else:
    print(f"Path '{path}' does not exist.")

22、os.path.join()

将多个路径片段组合成一个完整的路径。

import os

path1 = "/path/to"
path2 = "some/directory"
full_path = os.path.join(path1, path2)
print(f"Full path: {full_path}")

23、os.walk()

生成目录树中的文件名,在目录树中按广度优先搜索进行迭代。

import os

for root, dirs, files in os.walk("/path/to/directory"):
    print(f"Root: {root}")
    print(f"Dirs: {dirs}")
    print(f"Files: {files}")

24、os.sep

表示当前操作系统使用的路径分隔符。

import os

print(f"Path separator: {os.sep}")
25、os.name

返回操作系统的名字。这对于编写跨平台的代码很有用,因为它可以让你根据不同的操作系统使用不同的路径分隔符或行为。

import os

print(os.name)  # 输出: 'posix' (Unix/Linux), 'nt' (Windows)

在Unix/Linux系统中,os.name返回'posix';在Windows系统中,返回'nt'。这可以帮助你编写更兼容的代码,例如:

if os.name == 'nt':  # Windows
    separator = '\\'
else:  # Unix/Linux
    separator = '/'
26、 os.remove(path)

删除指定的文件。如果文件不存在,将抛出FileNotFoundError异常。

import os

file_path = "test.txt"
try:
    os.remove(file_path)
    print(f"File {file_path} removed.")
except FileNotFoundError:
    print(f"File {file_path} does not exist.")
27、 os.system(command)

在子shell中执行命令。这通常用于执行外部程序或系统级别的操作,如启动另一个程序或运行shell脚本。

import os

command = "ls -l"
os.system(command)  # 在Unix/Linux系统中列出当前目录的详细信息

请注意,os.system()并不推荐用于复杂的命令执行,因为它不安全也不提供错误处理。对于更复杂的需求,建议使用subprocess模块。

28、os.rename(src, dst)

重命名文件或目录,或将文件从一个位置移动到另一个位置。

import os

src = "old_name.txt"
dst = "new_name.txt"

try:
    os.rename(src, dst)
    print(f"File {src} renamed to {dst}.")
except FileNotFoundError:
    print(f"File {src} does not exist.")

如果srcdst位于同一目录下,这将重命名文件。如果它们位于不同的目录下,这将移动文件。

示例汇总:

import os

# 检查操作系统类型
print("Operating System:", os.name)

# 创建文件
with open("test.txt", "w") as file:
    file.write("Hello, world!")

# 删除文件
os.remove("test.txt")
print("File test.txt removed.")

# 执行系统命令
os.system("echo Hello from system command")

# 重命名文件
os.rename("test.txt", "renamed_test.txt")
print("File test.txt renamed to renamed_test.txt.")

请注意,在实际应用中,os.remove()os.system()应谨慎使用,因为它们可能会导致数据丢失或执行不安全的命令。在生产环境中,推荐使用更安全的替代方法,如os.unlink()代替os.remove(),以及subprocess.run()subprocess.call()代替os.system()

29、os.path.getctime(path)

os.path.getctime(path)函数用于获取文件或目录的创建时间。它返回一个浮点数,表示从1970年1月1日00:00:00(Unix纪元开始的时间)到现在的秒数,这被称为时间戳。

使用示例:

import os
import time

path = "example.txt"

# 获取文件的创建时间
create_time = os.path.getctime(path)

# 将时间戳转换为可读的日期和时间格式
readable_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(create_time))

print(f"The creation time of {path} is {readable_time}.")

在这个示例中,我们首先调用os.path.getctime()获取文件的创建时间,然后使用time.strftime()将这个时间戳转换成更易读的格式。time.localtime()用于将时间戳转换为本地时间。

注意事项:

  • 在Windows系统中,os.path.getctime()返回的是文件的创建时间。
  • 在Unix/Linux系统中,os.path.getctime()返回的是文件状态最后一次改变的时间,这可能包括文件的创建、修改或状态信息的改变。为了获取真正的创建时间,你可能需要使用os.stat()函数结合st_birthtime属性(如果可用)。
import os
import time
import platform

path = "example.txt"

if platform.system() == 'Windows':
    create_time = os.path.getctime(path)
else:
    stat = os.stat(path)
    if hasattr(stat, 'st_birthtime'):
        create_time = stat.st_birthtime
    else:
        raise NotImplementedError("Birthtime not available on this system.")

readable_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(create_time))
print(f"The creation time of {path} is {readable_time}.")

这段代码在不同操作系统上提供了更准确的创建时间获取方法。在Unix系统中,由于getctime()的行为不同,我们使用了os.stat()st_birthtime属性来获取创建时间。但是,请注意,st_birthtime并不是所有Unix系统都支持的,因此在某些情况下可能需要额外的处理。

30、os.sep

表示操作系统特定的路径分隔符。在Windows中,它是'\\';在Unix/Linux系统中,它是'/'

import os

print("Path separator:", os.sep)
31、 os.altsep

表示替代的操作系统特定的路径分隔符。在Windows中,除了'\\'之外,'/'也可以作为路径分隔符使用,因此os.altsep'/'。在许多Unix系统中,os.altsep可能为None,因为它们通常只使用'/'作为路径分隔符。

import os

if os.altsep:
    print("Alternative path separator:", os.altsep)
else:
    print("No alternative path separator defined.")
32、 os.pathsep

用于分隔环境变量中的一系列路径。在Windows中,它通常是;,而在Unix/Linux系统中,通常是:

import os

print("Path separator in environment variables:", os.pathsep)
33、 os.linesep

表示操作系统特定的行终止符。在Windows中,它是\r\n;在Unix/Linux系统中,它是\n

import os

print("Line separator:", os.linesep)

使用示例:

假设我们有一个跨平台的Python脚本,需要处理文件路径和环境变量,我们可以利用这些属性来确保代码的兼容性:

import os

# 获取当前工作目录
cwd = os.getcwd()

# 构建一个跨平台的路径
path = os.path.join(cwd, "test", "subdirectory")
print("Constructed path:", path)

# 构建一个包含多个路径的环境变量字符串
paths = [cwd, os.path.join(cwd, "test")]
env_paths = os.pathsep.join(paths)
print("Environment paths:", env_paths)

# 创建一个包含多行的文本字符串
text = "First line" + os.linesep + "Second line"
print("Text with linesep:", text)

# 如果存在替代的路径分隔符,打印出来
if os.altsep:
    print("Alternative path separator:", os.altsep)

通过使用os.sepos.altsepos.pathsepos.linesep,你可以编写出更健壮、更易于维护的跨平台代码,这些代码能够正确地处理不同操作系统中的路径和字符串格式。这尤其重要,当你需要在Windows和Unix/Linux之间共享或移植代码时。以上这些函数可以帮助你更方便地处理文件路径和目录,无论你是在何种操作系统环境中运行你的 Python 程序。使用 os 和 os.path 模块可以让你的代码更加跨平台和健壮。

  • 23
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值