我想删除该文件(filename如果存在).这是否合适
if os.path.exists(filename):
os.remove(filename)
Run Code Online (Sandbox Code Playgroud)
有没有更好的办法?单行方式?
Mat*_*att 581
一种更加pythonic的方式是:
try:
os.remove(filename)
except OSError:
pass
Run Code Online (Sandbox Code Playgroud)
虽然这需要更多的行并且看起来非常难看,但它避免了不必要的调用os.path.exists()并遵循过度使用异常的python约定.
编写一个函数来为您执行此操作可能是值得的:
import os, errno
def silentremove(filename):
try:
os.remove(filename)
except OSError as e: # this would be "except OSError, e:" before Python 2.6
if e.errno != errno.ENOENT: # errno.ENOENT = no such file or directory
raise # re-raise exception if a different error occurred
Run Code Online (Sandbox Code Playgroud)
Kev*_*vin 148
我更喜欢抑制异常,而不是检查文件的存在,以避免TOCTTOU错误.Matt的答案是一个很好的例子,但我们可以在Python 3下稍微简化一下,使用contextlib.suppress():
import contextlib
with contextlib.suppress(FileNotFoundError):
os.remove(filename)
Run Code Online (Sandbox Code Playgroud)
如果filename是pathlib.Path对象而不是字符串,我们可以调用其.unlink()方法而不是使用os.remove().根据我的经验,Path对象比文件系统操作的字符串更有用.
由于本答案中的所有内容都是Python 3独有的,因此它提供了升级的另一个原因.
abo*_*ght 49
os.path.exists返回True文件夹和文件.考虑使用os.path.isfile来检查文件是否存在.
wke*_*van 40
从 Python 3.8 开始,使用missing_ok=True和pathlib.Path.unlink(此处为文档)
from pathlib import Path
my_file = Path("./dir1/dir2/file.txt")
# Python 3.8+
my_file.unlink(missing_ok=True)
# Python 3.7 and earlier
if my_file.exists():
my_file.unlink()
Run Code Online (Sandbox Code Playgroud)
Tim*_*ing 36
根据Andy Jones的回答,真正的三元操作如何:
os.remove(fn) if os.path.exists(fn) else None
Run Code Online (Sandbox Code Playgroud)
另一种知道文件(或文件)是否存在以及将其删除的方法是使用模块glob.
from glob import glob
import os
for filename in glob("*.csv"):
os.remove(filename)
Run Code Online (Sandbox Code Playgroud)
Glob找到所有可以使用*nix通配符选择模式的文件,并循环列表.
Matt的答案是较旧的Python 的正确答案,而Kevin的答案是较新的Python 的正确答案。
如果您不想复制的功能silentremove,则此功能在path.py中显示为remove_p:
from path import Path
Path(filename).remove_p()
Run Code Online (Sandbox Code Playgroud)
小智 5
if os.path.exists(filename): os.remove(filename)
Run Code Online (Sandbox Code Playgroud)
是单线的。
你们中的许多人可能会不同意(可能是出于考虑将三元体系建议使用为“丑陋”的原因)的想法,但这引出了一个问题,即当人们习惯将丑陋标准称为“非丑陋”时,我们是否应该听取他们的意见。
从 Python 3.3 开始,您可以使用FileNotFoundError比接受的版本更正确的版本,因为它不会忽略其他可能的错误。
try:
os.remove(filename)
except FileNotFoundError:
pass
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
256227 次 |
| 最近记录: |