文件存在时 os.rename 不会引发 FileExistsError

2024-01-11

我有一个file_rename我想通过一个简单的改进机制try/except块将检查重命名的文件是否已存在于目录中。

我在我的目录中准备了2个文件:data.txt and old_data.txt。函数应该抛出异常,如下所示old_data.txt已经存在,这意味着数据在过去已被处理过。

但是,下面的代码不起作用,因为它仍在重命名data.txt文件。我非常感谢对此的任何帮助和指导。

@staticmethod
def file_rename(file, dir):
    source_file_new_name = "old_" + file
    try:
        os.path.isfile(dir + source_file_new_name)
        os.rename(os.path.join(dir, file), os.path.join(dir, source_file_new_name))
    except FileExistsError:
        raise FileExistsError("this file was already processed")

根据 Rafał 和 BrokenBenchmark 的提示,我想出了下面的版本,但不确定它是否足够 Pythonic;)

class FileExistsError(Exception):
    pass

@staticmethod
def file_rename(file, dir):
    source_file_new_name = "old_" + file

    if os.path.isfile(dir + source_file_new_name):
        raise FileExistsError("this file was already processed!")
    else:
        os.rename(os.path.join(dir, file), os.path.join(dir, source_file_new_name))

你的代码假设os.rename将提出一个FileExistsError. 仅当代码在 Windows 上运行时才能做出该假设。 Python 文档os.rename() state https://docs.python.org/3/library/os.html#os.rename:

os.rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None)

重命名文件或目录src to dst. If dst存在,操作将失败并显示OSError在许多情况下子类:

在 Windows 上,如果dst存在一个FileExistsError总是被提出。

在 Unix 上,...[i]如果两者[src and dst] 是文件,dst如果用户有权限,它[原文如此]将被静默替换。

要解决此问题,请使用if声明与.isfile()相反,而不是依赖try/except这取决于不可移植的行为才能工作:

def file_rename(file, dir):
    source_file_new_name = "old_" + file
    if os.path.isfile(os.path.isfile(dir + source_file_new_name)):
        os.rename(os.path.join(dir, file), os.path.join(dir, source_file_new_name))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

文件存在时 os.rename 不会引发 FileExistsError 的相关文章

  • 根据随机选择的列生成随机天数

    我有一个如下所示的数据框 感谢 SO 社区在以下方面提供的帮助 df1 pd DataFrame person id 11 11 12 13 14 date birth 01 01 1961 12 30 1961 05 29 1967 01
  • 如何查找分布式dask中任务失败的原因?

    我正在开发一个分布式计算系统dask distributed 我通过以下方式提交给它的任务Executor map功能有时会失败 而其他看起来相同的功能却可以成功运行 该框架是否提供了诊断问题的方法 update我所说的失败是指增加 Bok
  • 如何有条件地组合两个相同形状的 numpy 数组

    这听起来很简单 但我想我把它想得太复杂了 我想创建一个数组 其元素是从两个形状相同的源数组生成的 具体取决于源数组中哪个元素更大 为了显示 import numpy as np array1 np array 2 3 0 array2 np
  • Pytest:如何使用从夹具返回的列表来参数化测试?

    我想使用由固定装置动态创建的列表来参数化测试 如下所示 pytest fixture def my list returning fixture depends on other fixtures return a dynamically
  • 为 PyCharm 中的所有配置设置相同的环境变量

    我有一个与 Celery 和很多不同的工作人员一起的项目 如何避免每次将 PyCharm 中的环境变量复制粘贴到每个运行 调试配置 有什么方法可以在项目设置中设置它们吗 找到解决方案here https stackoverflow com
  • 如何在 openpyxl 中设置或更改表格的默认高度

    我想通过openpyxl更改表格高度 并且我希望首先默认一个更大的高度值 然后我可以设置自动换行以使我的表格更漂亮 但我不知道如何更改默认高度 唯一的到目前为止 我知道更改表格高度的方法是设置 row dimension idx heigh
  • 基于 True/False 值的 Python 优雅赋值

    我想根据三个布尔值中的值设置一个变量 最直接的方法是 if 语句后跟一系列 elif if a and b and c name first elif a and b and not c name second elif a and not
  • 一起使用 Argparse 和 Json

    我是 Python 初学者 我想知道 Argparse 和 JSON 是否可以一起使用 说 我有变量p q r 我可以将它们添加到 argparse 中 parser add argument p param1 help x variabl
  • 我有一个 Employee 类,我想返回“姓名”列表

    我有一个 Employee 类 我想返回 姓名 列表 雇员 py class Employee object def init self id name members None self id id self name name self
  • Python 相当于 Bit Twiddling Hacks 中的 C 代码?

    我有一个位计数方法 我正在尝试尽可能快地实现 我想尝试下面的算法位摆弄黑客 http graphics stanford edu seander bithacks html CountBitsSetParallel 但我不知道 C 什么是
  • 熊猫记忆

    我有冗长的计算 我重复了很多次 因此 我想使用记忆 诸如jug http packages python org Jug and joblib http packages python org joblib memory html 与Pan
  • 如何将同步函数包装在异步协程中?

    我在用着aiohttp https github com aio libs aiohttp构建一个 API 服务器 将 TCP 请求发送到单独的服务器 发送 TCP 请求的模块是同步的 对于我来说是一个黑匣子 所以我的问题是这些请求阻塞了整
  • 在 GAE/Python 中放置一次性代码和每次代码的最佳位置在哪里?

    我是 Google App Engine 和 Python 的新手 我无法理解有关在 Google App Engine 上运行的 Python 应用程序的一些基本问题 如果我想要执行代码 对于每个传入的请求 我应该将其放在哪里 我们正在捕
  • Docker 日志中的 Python 异常标记为流:stdout

    我想解析和处理来自 docker 容器的所有错误 但当我期望 stderr 时 Python 异常标记为 stdout 举个简单的例子app py raise Exception 然后我在 docker 容器中运行这个文件 但在 var l
  • 将参数传递给 __enter__

    刚刚学习 with 语句尤其是这篇文章 http effbot org zone python with statement htm 问题是 我可以传递一个参数给 enter 我有这样的代码 class clippy runner def
  • Scikit Learn - K-Means - 肘部 - 标准

    今天我想学习一些关于 K means 的知识 我已经了解该算法并且知道它是如何工作的 现在我正在寻找正确的 k 我发现肘部准则作为检测正确的 k 的方法 但我不明白如何将它与 scikit learn 一起使用 在 scikit learn
  • 向伪 shell (pty) 发出命令

    我尝试使用 subprocess popen os spawn 来运行进程 但似乎需要伪终端 import pty master slave pty openpty os write master ls l 应该发送 ls l 到从属终端
  • python csv按列转换为字典

    是否可以将 csv 文件中的数据读取到字典中 使得列的第一行是键 同一列的其余行构成列表的值 例如 我有一个 csv 文件 strings numbers colors string1 1 blue string2 2 red string
  • Python列表对象属性“append”是只读的

    正如标题所说 在Python中 我试图做到这一点 以便当有人输入一个选择 在本例中为Choice13 时 它会从密码列表中删除旧密码并添加新密码 passwords mrjoebblock mrjoefblock mrjoegblock m
  • 如何使用 FastAPI 在 HTMX 前端中使用 HX-Redirect?

    我试图在登录后在前端重定向 我像这样从我的 htmx 前端发出请求

随机推荐

  • 如何将 Pydantic BaseModels 列表转换为 Pandas Dataframe

    我似乎找不到任何内置方法可以简单地将 Pydantic BaseModels 列表转换为 Pandas Dataframe from pydantic import BaseModel import pandas as pd class S
  • futures::executor::block_on 和 block_in_place 之间是否存在性能差异

    我在同步方法内调用异步代码 此方法是特征的一部分 我无法异步实现它 所以我使用block on等待异步调用完成 将从异步代码调用同步方法 所以应用程序是在 tokio main 当某些事件发生 端点命中 时 它会调用同步方法 同步方法将调用
  • 如何向 jquery.datatables 列添加类?

    我为 jquery datatables 创建了一个大表 这对我来说非常有用 但我需要为每个 td 元素相对于其列设置一个类名 例如我想要一列 包括 th 和所有 td 有一个class volume 有这样的问题 我使用此代码来初始化该类
  • Xcode 6 - Main.storyboard 仅显示为源代码,缺少 Interface Builder

    不知何故 我的 Xcode 设置变得混乱 因为它只会将我的 Main storyboard 文件显示为 XML 代码 我被告知可以通过从 打开方式 菜单中选择界面生成器来解决此问题 但菜单下没有任何内容 唯一的 选择 是灰显的 我已经清除了
  • 模拟程序JoinPoint 签名

    我正在尝试模拟 ProceedingJoinPoint 类 但在模拟方法时遇到困难 这是调用模拟类的代码 ProceedingJoinPoint joinPoint Object targetObject joinPoint getTarg
  • 如何在python 3.4中安装xmlrpclib?

    当我尝试安装 xmlrpclib 时 我在 python 版本 3 4 中收到以下错误 下载 解压 xmlrpclib 找不到任何满足 xmlrpclib 要求的下载 一些外部托管的文件被忽略 使用 allow external xmlrp
  • Sonarqube Web 应用程序未启动

    我正在Windows下使用PostgreSQL9 5安装SN5 5 不幸的是 我遇到了错误 Webapp 未启动 下面是完整的堆栈跟踪 我想我首先在 将上下文初始化事件发送到类 org sonar server platform Platf
  • 如何将特定的可变“订单”保存到数据库中

    假设我有一些对象 并且我希望用户能够以他们希望的任何方式对它们重新排序 例如通过拖动它们 所以我会有 Cheese Muffins Milk 然后用户将 牛奶 拖到顶部 进行新订单 Milk Cheese Muffins 是否有最佳实践如何
  • 嵌套 JSON 对象 - 我是否必须使用数组来处理所有事情?

    有没有什么方法可以在 JSON 中嵌套对象 这样我就不必用所有东西制作数组 为了正确解析我的对象 我似乎需要这样的结构 data stuff onetype id 1 name John Doe id 2 name Don Joeh oth
  • djangorest框架更新序列化器中的方法,实例不会立即保存

    要更新的实例有 email protected cdn cgi l email protection 电子邮件要更新或更改为 email protected cdn cgi l email protection UserUpdateSeri
  • 如何获取所有带有特色图片的 WordPress 帖子?

    WordPress 3 中有特色图片功能 如何获取所有带有特色图片的帖子 这是我当前的自定义循环 loop new WP Query array posts per page gt 15 这应该有效 loop new WP Query ar
  • Javascript 事件处理和流程控制

    我正在尝试构建一个根据提供的输入加载的网页 基本上 我在 javascript 中的事件处理方面遇到了一些麻烦 来自 python 如果我想在继续显示下一个对象之前等待特定的键盘输入 我会创建一个while循环并在其中放置一个关键侦听器 P
  • MapKit 显示整个地球

    我正在尝试在 MKMapView 中绘制整个地球仪 通过捏合缩小 我只能缩小到一定程度 我希望能够缩小到这个级别以上 以在地图上显示整个地球 这似乎不是很困难 但我一直找不到任何解决方案 里面的地图MKMapView不会在侧面重复 因此您无
  • 将 CSV 文件的内容加载到数组而不打开文件[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我需要将 6000 多个 csv 文件整理成一个 csv 文档 目前的VBA流程是 1 打开单独的CSV数据文件 2 根据行数将文件内
  • 如何在 Chutzpah 的无头浏览器中使用 templateUrl 测试指令

    有谁知道如何让像 Chutzpah 的 Visual Studio 测试适配器这样的无头浏览器允许指令访问其 html 模板文件 Chutzpah 使用 PhantomJS 作为无头浏览器 这似乎限制了我的选择 我正在使用 Chutzpah
  • azure apim中的JWT验证失败错误

    我目前正在尝试使用以下文档实施 Oauth2 0 来保护 API https learn microsoft com en us azure api management api management howto protect backe
  • 您在实体框架中发现的最烦人的功能(或缺乏功能)是什么?

    我从实体框架开始 听起来不错 但我想知道我是否应该留意某个地方的弱点 那里有什么经验吗 您可能需要开始在这些问题前加上您正在讨论的版本的前缀 NET 4 0 即将发布的版本中已经修复了大量的烦恼 这是我在使用第一个版本大约 6 个月后在 s
  • 当触发新管道时取消之前的管道 GitHub Actions

    我遇到了拦截器 我确信其他人一定也遇到过这个问题 所以只需检查是否有任何解决方法 这是一个 Github 工作流程示例 name Test Build on pull request types opened synchronize reo
  • Flutter 能否消除使用 Mac 创建 IOS 应用程序的需要?

    所以我想构建 Android 和 IOS 应用程序 有一天我发现了 flutter 我知道 IOS 需要 MacOS 但 flutter 可以在 Windows 上运行 我的问题是 我可以使用flutter在Windows计算机上开发和发布
  • 文件存在时 os.rename 不会引发 FileExistsError

    我有一个file rename我想通过一个简单的改进机制try except块将检查重命名的文件是否已存在于目录中 我在我的目录中准备了2个文件 data txt and old data txt 函数应该抛出异常 如下所示old data