Python 文件操作指南

Python 文件操作指南

Persus XIE
2023.7.21

检查文件是否存在

方法1: os.path.exists()

使用os 模块

os 模块中的os.path.exists()方法用于检验文件是否存在;

import os

## 如果存在,返回 True, 否则返回 False
os.path.exists("/path1/path2/filename")

但是这种方法存在漏洞,假设在当前路径下存在一个名为 file_A的文件夹,就可能出现误判,为了避免这种情况的发生,可以使用 os.path.isfile() 方法:

方法2: os.path.isfile

import os

## 如果存在,返回 True, 否则返回 False
os.path.isfile("/path1/path2/filename")

方法3: os.access()

os.access()os.F_OK模式也可用于检查文件是否存在:

import os

## 如果存在,返回 True, 否则返回 False
os.access("/path1/path2/filename", os.F_OK)

方法4: try 语句

可以使用 try 结合 open()方法来检查文件是否存在,如果文件不存在,程序会抛出错误,使用 try 捕获这个错误:

filename = "/path1/path2/filename"
try:
		file = open(filename)
		file.close()
except FileNotFoundError:
  	print(f"{filename} is not found.")

方法5: pathlib 模块

pathlib 模块是Python 3版本的内建模块,Python 2版本需要安装。

import pathlib 

# 检查文件是否存在,如果存在,返回 True, 否则返回 False
filename = pathlib.Path("/path1/path2/filename")
filename.exist()
# 检查是否是文件,如果是,返回 True, 否则返回 False
filename.is_file()

判断文件的权限(读、写、执行)

使用os.access()方法判断文件是否有执行 权限。

import os

## 判断文件是否可读,如果可读,返回 True, 否则返回 False
os.access("/path1/path2/filename", os.R_OK)

## 判断文件是否可写,如果可写,返回 True, 否则返回 False
os.access("/path1/path2/filename", os.W_OK)

## 判断文件是否可执行,如果可执行,返回 True, 否则返回 False
os.access("/path1/path2/filename", os.X_OK)

更改文件权限

import os

# 权限值有三个:1 -> 执行,2 -> 写入, 4-> 读取
#所有用户(拥有者,组用户,其他用户)设置 读写权限
os.chmod(filename, 0o666)

# 仅设置读权限
os.chmod(filename, 0o444)

# 设置可读可写可执行权限
os.chmod(filename, 0o777)
# 7 = 1 + 2 + 4 
# 3 = 1 + 2 表示有写入和执行两个权限
# 5 = 4 + 1 有读取和执行两个权限
# 6 = 2 + 4 有写入和读取两个权限
# 0, 什么权限都没有

文件路径

查看当前程序的路径

import sys
ABSPATH=sys.path[1]
print(ABSPATH)

设置调用脚本的路径

import os
filepath = os.path.dirname(__file__)
print(filepath)

运行程序的当前路径:

import os
ABSPATH=os.getcwd()
print(ABSPATH)

文件的读取

Python 的内置函数 open 可以很方便的读取文件内容

open() 函数是 Python 内置的一个用于打开文件的函数。它的基本语法如下:

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

其中,各参数的含义如下:

  • file: 要打开的文件名(包括路径),可以是相对路径或绝对路径。如果文件不存在,则会抛出 FileNotFoundError 异常。
  • mode: 打开文件的模式,可选的值有:
    • 'r':只读模式,打开一个已经存在的文件,如果文件不存在则会抛出 FileNotFoundError 异常。
    • 'w':写入模式,打开一个文件进行写操作,如果文件不存在则创建文件,如果文件已经存在则清空文件内容。
    • 'x':独占写模式,创建一个新文件,如果文件已经存在则会抛出 FileExistsError 异常。
    • 'a':追加模式,打开一个文件进行写操作,如果文件不存在则创建文件。
    • 'b':二进制模式,以二进制形式打开文件,与其他模式组合使用。
    • 't':文本模式,以文本形式打开文件,与其他模式组合使用。如果不指定该模式,则默认为文本模式。
    • '+':读写模式,打开一个文件进行读写操作。
  • buffering: 控制文件的缓冲策略,可选的值有:
    • -1 或不指定:使用系统默认的缓冲区大小。
    • 0:不使用缓冲区,每次操作立即写入文件。
    • 1:使用行缓冲,即每次写入一行时将数据写入文件。
    • 大于 1 的整数:表示缓冲区大小,单位为字节。
  • encoding: 文件的编码格式,只用于文本模式。如果不指定该参数,则使用系统默认的编码格式。
  • errors: 文件编码格式转换时遇到错误的处理方式,可选的值有:
    • 'strict':遇到错误时抛出异常。
    • 'ignore':忽略错误。
    • 'replace':用指定的字符替换错误的字符。
  • newline: 换行符的处理方式,可选的值有:
    • None 或不指定:使用系统默认的换行符。
    • '':不使用换行符。
    • '\n':使用换行符。
  • closefd: 是否关闭底层的文件描述符,该参数仅在 Unix 系统中生效。
  • opener: 自定义文件打开器,必须是一个带有 open() 方法的对象。

打开文件后,可以使用 read()write()seek() 等方法对文件进行读写操作。文件使用完毕后,应该调用 close() 方法关闭文件。

数据处理

最大进程数

在数据处理过程中,为了提升计算效率,在 Python 中,可以通过 multiprocessing.cpu_count() 函数获取电脑的最大进程数。该函数会返回一个整数,表示 CPU 的核心数。例如,下面的代码演示了如何获取电脑的最大进程数:

import multiprocessing

max_processes = multiprocessing.cpu_count()
print(f"Max processes: {max_processes}")

执行结果为:

Max processes: 10

这里的 10 表示电脑有 10个 CPU 核心,因此最多可以运行 10 个进程。

os和subprocess 执行外部命令的区别

subprocessos 都是 Python 标准库中的模块,主要用于执行外部命令和管理系统资源。虽然它们的功能有些重叠,但是它们的主要区别如下:

  1. 功能不同:os 主要用于管理文件和目录,比如创建、删除、修改文件或目录,以及获取文件和目录的信息。而 subprocess 主要用于执行外部命令,可以用来调用其他程序或脚本,并可以控制子进程的输入、输出和错误。
  2. 接口不同:os 提供了一些基本的操作系统接口,如 os.mkdir() 用于创建目录,os.remove() 用于删除文件,os.path.join() 用于拼接路径等。而 subprocess 提供了一些高级接口,如 subprocess.call() 用于执行外部命令并等待其完成,subprocess.Popen() 用于启动一个新的进程,subprocess.check_output() 用于执行外部命令并返回输出结果等。
  3. 跨平台支持不同:os 模块在不同的操作系统上有不同的实现,因此它的功能可能会因操作系统而异。而 subprocess 模块的接口是跨平台的,可以在不同的操作系统上执行相同的命令。

综上所述,ossubprocess 模块有不同的用途和接口,应根据具体的需求选择适合的模块。在使用时,应注意遵循 Python 的最佳实践,如使用 subprocess.run() 替代 subprocess.call(),以避免安全漏洞。

并行计算

并行计算的开销主要包括进程的创建和销毁、数据分配和通信等,而这些开销在单进程中都是不存在的。因此,在计算开销比较小的情况下,使用单进程可能会更快。

如果计算任务的规模比较小,数据规模较小,那么并行计算的效率可能不如单进程。这是因为在并行计算中,每个进程都需要进行额外的开销来协调和同步计算任务,如果这些额外开销比计算本身还要大,那么并行计算的效率就会受到影响。

总之,在选择并行计算时需要考虑计算任务的规模、计算的开销以及数据的分配方式等因素,以确定使用多进程是否更快。同时,在实际应用中,还需要进行多次实验,以选择最优的并行计算方案。

你可能感兴趣的:(python)