Python “open(fname,';r';).close()”和“os.path.isfile(fname)”之间的区别`
我必须检查多个文件的存在性和可读性。哪种方法最有效Python “open(fname,';r';).close()”和“os.path.isfile(fname)”之间的区别`,python,file-processing,Python,File Processing,我必须检查多个文件的存在性和可读性。哪种方法最有效 list_of_files = [fname1,fname2,fname3] for fname in list_of_files: try: open(fname, 'r').close() except IOError: raise YourCustomError 或 有一个共同的理念-执行并请求原谅,而不是事先请求许可 第一种方法尝试以可读模式打开文件,如果文件不存在或不可读,则会失败。在
list_of_files = [fname1,fname2,fname3]
for fname in list_of_files:
try:
open(fname, 'r').close()
except IOError:
raise YourCustomError
或
有一个共同的理念-执行并请求原谅,而不是事先请求许可 第一种方法尝试以可读模式打开文件,如果文件不存在或不可读,则会失败。在手术失败后,我们请求原谅 在第二种方法中,我们只是先请求许可。但是,您的第二个示例只检查它是否是文件,而不检查权限
但是,使用上下文管理器(
和open(filename,“r”)
)可能是一种更好的方法,而不是手动关闭文件处理程序 有一个共同的理念——执行并请求原谅,而不是事先请求许可
第一种方法尝试以可读模式打开文件,如果文件不存在或不可读,则会失败。在手术失败后,我们请求原谅
在第二种方法中,我们只是先请求许可。但是,您的第二个示例只检查它是否是文件,而不检查权限
但是,使用上下文管理器(和open(filename,“r”)
)可能是一种更好的方法,而不是手动关闭文件处理程序
我必须检查多个文件的存在性和可读性。哪种方法最有效
list_of_files = [fname1,fname2,fname3]
for fname in list_of_files:
try:
open(fname, 'r').close()
except IOError:
raise YourCustomError
这不仅仅是效率的问题,因为你的两种方法做的事情并不相同。例如,一个文件可能是因为权限。第一种方法是两种方法中唯一一种实际检查文件是否打开且可读的方法(至少在某个时间点-两种方法都有竞争条件)
我必须检查多个文件的存在性和可读性。哪种方法最有效
list_of_files = [fname1,fname2,fname3]
for fname in list_of_files:
try:
open(fname, 'r').close()
except IOError:
raise YourCustomError
这不仅仅是效率的问题,因为你的两种方法做的事情并不相同。例如,一个文件可能是因为权限。您的第一种方法是两种方法中唯一一种实际检查文件是否打开和可读的方法(至少在某个时间点-两种方法都有竞争条件)。如果您计划使用这些文件,则两种方法都不可用。在通话和使用文件之间,可能会删除文件或更改权限,从而使该信息过时。相反,只需尝试使用该文件并在此处处理异常:
try:
with open(fname, 'r') as f:
# use f
except FileNotFoundError as e:
# file was deleted
except IsADirectoryError as e:
# path exists but is a directory
except PermissionError as e:
# you don't have permissions to read the file
except OSError as e:
# other error
但是,如果您正在编写一个向用户显示有关权限信息的工具,那么使用为此目的提供的方法和函数是有意义的,因此您应该使用和
如果您处理的是整个目录,请注意,使用和检查DirEntry
s对象上的方法更有效。如果您计划使用这些文件,则两者都不。在通话和使用文件之间,可能会删除文件或更改权限,从而使该信息过时。相反,只需尝试使用该文件并在此处处理异常:
try:
with open(fname, 'r') as f:
# use f
except FileNotFoundError as e:
# file was deleted
except IsADirectoryError as e:
# path exists but is a directory
except PermissionError as e:
# you don't have permissions to read the file
except OSError as e:
# other error
但是,如果您正在编写一个向用户显示有关权限信息的工具,那么使用为此目的提供的方法和函数是有意义的,因此您应该使用和
如果要处理整个目录,请注意,使用和检查DirEntry
s对象上的方法更有效。关于os.access()
?如何os.access()
?