【问题标题】:How do I use shutil to make a python file copy itself after doing a calculation?计算后如何使用shutil使python文件复制自己?
【发布时间】:2014-08-27 16:20:23
【问题描述】:

所以我有一个将素数写入 csv 文件的 python 程序。我现在希望我的 python 文件在它运行所有内容后复制它自己,作为我调整原始文件时的备份。

到目前为止,我已经通过让 python 程序创建一个新的 .py 文件,然后在其中写入所有内容,从而摆脱了不知道这一点,但这非常低效。我希望它更简洁、更简单。

我听说过一些有关使用 shutil.copyfile 的信息,但我不太清楚如何使用它。 shutil.copyfile 是让我的 python 文件复制自己的最佳方法,还是有更好的方法?

【问题讨论】:

  • 你试过shutil.copy(__file__, "destination.py")吗?
  • 不要让你的程序复制自己。正如@Vor 所建议的那样,使用真正的备份策略,甚至更好的是,像 Git 这样的版本控制系统。
  • 作为备份 - 您将遇到的问题之一是,除非您在每个副本上为程序生成唯一名称,否则运行将覆盖以前的运行,这有点违背了备份的目的。

标签: python file copy backup shutil


【解决方案1】:

修订控制软件旨在解决此问题,即保留旧文件的副本。以你的方式去做会让你的源文件夹非常混乱。 Mercurial/Hg 是really easy to learn 并使用(它也是用python编写的)。

否则回答问题:

shutil.copy(__file__, "new_destination.py")

【讨论】:

  • 你不需要 abspath,但更大的问题是 __file__ 可能是 .pyc 文件。您需要对其进行修剪以获取 .py 文件。
  • @tdelaney 这取决于您当前的工作目录。如果您在文件所在的路径内,它只会返回 .py 文件的相对路径。见stackoverflow.com/questions/7116889/…
  • @Thimble - 你说得对,文件名并不总是绝对的。但是你不需要绝对的文件名来复制文件。
  • @tdelaney 你说得对,不需要绝对路径。关于需要修剪.pyc,除非文件作为模块导入并像module.__file__一样被复制,否则__file__将返回.py路径的可能性更高,因为脚本正在直接运行,即@987654329 @。如果 OP 直接运行 .pyc,则路径将以 .pyc 结尾。
  • @vikki - 好的,我将其更改为“可能”而不是“可能”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-24
  • 1970-01-01
  • 2018-07-24
  • 2023-01-29
  • 2021-09-08
  • 1970-01-01
相关资源
最近更新 更多