os.path.exists()
使用os
模块
os 模块中的os.path.exists()
方法用于检验文件是否存在;
import os
## 如果存在,返回 True, 否则返回 False
os.path.exists("/path1/path2/filename")
但是这种方法存在漏洞,假设在当前路径下存在一个名为 file_A
的文件夹,就可能出现误判,为了避免这种情况的发生,可以使用 os.path.isfile()
方法:
os.path.isfile
import os
## 如果存在,返回 True, 否则返回 False
os.path.isfile("/path1/path2/filename")
os.access()
os.access()
的 os.F_OK
模式也可用于检查文件是否存在:
import os
## 如果存在,返回 True, 否则返回 False
os.access("/path1/path2/filename", os.F_OK)
try
语句可以使用 try
结合 open()
方法来检查文件是否存在,如果文件不存在,程序会抛出错误,使用 try
捕获这个错误:
filename = "/path1/path2/filename"
try:
file = open(filename)
file.close()
except FileNotFoundError:
print(f"{filename} is not found.")
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 个进程。
subprocess
和 os
都是 Python 标准库中的模块,主要用于执行外部命令和管理系统资源。虽然它们的功能有些重叠,但是它们的主要区别如下:
os
主要用于管理文件和目录,比如创建、删除、修改文件或目录,以及获取文件和目录的信息。而 subprocess
主要用于执行外部命令,可以用来调用其他程序或脚本,并可以控制子进程的输入、输出和错误。os
提供了一些基本的操作系统接口,如 os.mkdir()
用于创建目录,os.remove()
用于删除文件,os.path.join()
用于拼接路径等。而 subprocess
提供了一些高级接口,如 subprocess.call()
用于执行外部命令并等待其完成,subprocess.Popen()
用于启动一个新的进程,subprocess.check_output()
用于执行外部命令并返回输出结果等。os
模块在不同的操作系统上有不同的实现,因此它的功能可能会因操作系统而异。而 subprocess
模块的接口是跨平台的,可以在不同的操作系统上执行相同的命令。综上所述,os
和 subprocess
模块有不同的用途和接口,应根据具体的需求选择适合的模块。在使用时,应注意遵循 Python 的最佳实践,如使用 subprocess.run()
替代 subprocess.call()
,以避免安全漏洞。
并行计算的开销主要包括进程的创建和销毁、数据分配和通信等,而这些开销在单进程中都是不存在的。因此,在计算开销比较小的情况下,使用单进程可能会更快。
如果计算任务的规模比较小,数据规模较小,那么并行计算的效率可能不如单进程。这是因为在并行计算中,每个进程都需要进行额外的开销来协调和同步计算任务,如果这些额外开销比计算本身还要大,那么并行计算的效率就会受到影响。
总之,在选择并行计算时需要考虑计算任务的规模、计算的开销以及数据的分配方式等因素,以确定使用多进程是否更快。同时,在实际应用中,还需要进行多次实验,以选择最优的并行计算方案。