将 .py 文件保存到文件本身之外的另一个目录中的脚本

3
假设我在名为directory1的目录中创建了一个名为file.py的文件。当运行file.py时,是否有一种方法可以将其自身脚本保存到另一个目录directory2中,例如作为.txt文件或.py文件?
谢谢!

你_可以_……但是你为什么要这样做呢? - Ryan J
你到目前为止尝试了什么(例如,任何代码示例)? - Marcin
@RyanJ:因为我每次运行文件时都会更改参数,需要跟踪我正在做的事情。不是逐个保存它们,保存脚本要方便得多。 - nayriz
@Marcin:我完全不知道如何着手处理这个问题。 - nayriz
1
这在进行实验时非常重要。@RyanJ,我也看到下面有不同的版本控制工具被建议。它们确实有其优点,但我认为对于科学实验,有时候像这样的简单解决方案最好。如果有人对这种情况有其他建议,那就太好了,我们很乐意听取。 - Hawklaz
2个回答

1
一般来说,如果您使用编辑器编写代码,您可以将其保存到另一个目录并使用不同的文件扩展名。但我猜想您想在不同目录中备份它?这取决于您的编辑器,大多数现在都可以实现这个功能。
当然,您也可以在文件中编写类似以下内容的内容,将其复制到所选目录:
import os, shutil

if not os.access(dirname, os.F_OK):
    os.mkdir(dirname, 0o700)

shutil.copy(fname, dirname)

这段代码的作用是,首先创建一个目录(如果不存在),并授予读、写和执行权限。然后将fname中包含的文件名的内容复制到刚刚创建的目录中。
但是为什么要将最近编写的代码复制到不同的位置呢?
编辑:
为了跟踪您的工作,有更好的方法可以做到这一点,例如版本控制系统,如darcs、subversion(也称为svn)或gitorious(主要基于Web)。它们使用不同的版本号保存您的工作,您不必每次达到里程碑时都修改文件名。它们帮助您打开分支,稍后加入它们,并在选择获取早期版本时保持您的代码可执行。
fname = "work_today.txt"

你可以将代码保存到新的文件名中,即使它包含的文件代码完全相同。你需要正确修改文件名,去掉扩展名并连接新字符串。


谢谢你的提示。我有很好的理由将它保存到另一个目录中,其中之一是我可以使用不同的名称保存它,例如fname_todaysdate,以及其他输出文件。顺便问一下,你知道如何将它保存为.txt文件吗? - nayriz
是的,你可以只改变fname为fname = "work_today.txt",但使用版本控制系统更加舒适,并且可以使你的代码立即可执行。你可以打开分支,重新合并它们,并轻松查看两个版本之间的差异。 - camaro
我毫不怀疑那些工具一定非常有用,但是在我的特定情况下,我的选择基本上只限于我可以在.py文件中编写的内容。 - nayriz
我们以Subversion (SVN)为例:您只需输入svn add blub.py即可添加文件,如果您想保存更改,只需输入svn commit即可保存新版本。这些工具的设计旨在让事情变得更加容易。 - camaro
你需要正确修改文件名,去掉扩展名并连接新字符串。 - camaro
显示剩余5条评论

0

你可以将这个函数放在你的".py"文件中,然后在同一个文件中使用它。

import os, shutil
def save_this_file(output_path):
    """
    Copy the current .py file to another directory as a backup
    output_path: full path of a folder
    """
    path_this_file = os.path.realpath(__file__)  # full path of the current .py file
    base_name = os.path.basename(path_this_file)  # 'abc.py'
    dst = os.path.join(output_path, base_name)  # construct the full path of destination
    shutil.copy(src=path_this_file, dst=dst)  # copy this file to destination

请注意:

  1. output_path 是目标文件夹的完整路径;
  2. 复制的“.py”文件与原始文件保持相同的名称;
  3. 如果您将此函数导入到另一个“.py”文件中,则会将其保存在其中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接