替换python文件组中的字符串

替换python文件组中的字符串,python,gradle,Python,Gradle,我有一个在文件夹中执行大量python文件的项目。它们都有一行PATH=“defaultstring”。我想让它更具动态性,即将所有python文件中的“defaultstring”替换为运行时提供的一些“otherstring”。如果运行时未提供字符串,则“defaultstring”将是默认值 我正在使用gradle构建项目。我可以做的一件事是在执行这些文件组之前执行一些python脚本,比如“main.py”。“main.py”可以迭代到所有文件,打开它们,并将PATH=“defaults

我有一个在文件夹中执行大量python文件的项目。它们都有一行PATH=“defaultstring”。我想让它更具动态性,即将所有python文件中的“defaultstring”替换为运行时提供的一些“otherstring”。如果运行时未提供字符串,则“defaultstring”将是默认值

我正在使用gradle构建项目。我可以做的一件事是在执行这些文件组之前执行一些python脚本,比如“main.py”。“main.py”可以迭代到所有文件,打开它们,并将PATH=“defaultstring”替换为“otherstring”

是否可以在每次运行时不更改文件夹中的所有文件的情况下执行此操作?这是因为如果我在第一次运行时将“defaultstring”更改为“otherstring”,在第二次运行时,假设我不提供任何运行时输入,那么默认情况下将执行PATH=“otherstring”,但我要保留的默认值是“defaultstring”。在这种情况下,我可以将“otherstring”更改为“defaultstring”,但我想使用某种方法,这种方法不会遍历所有文件并更改这些行


我们可以使用fixture injection(我对fixture injection不太了解,因此任何其他技术也会很有帮助)来实现这一点吗?

假设您的文件具有某种独特且可识别的命名模式,您可以执行以下操作:

  • 使用关键字更改变量
  • 如果创建执行这些步骤的函数,并将其作为主函数中代码的第一个操作执行,则应能够在运行时全局更改变量路径,而无需与硬盘上存储的文件交互(因此不会更改默认值)

    编辑:尽管上述方法有望奏效,但它仍然是一种糟糕的做法。如果您有一个包含所有其他文件都导入的变量的文件,则效果会更好。然后,您只需更改一个变量,其意图比您最初打算更改的版本要清楚得多

    Edit2:您可以将项目结构为包含以下具有相应函数或变量的文件。如果所有文件都导入包含路径的公共文件,则此设置允许您在启动脚本时在运行时更改变量路径。在每个文件中更改变量的另一个选项更麻烦,我只会在真正需要时添加该选项

    globals.py

    PATH='original/PATH'
    def修改路径(新路径):
    全局路径
    路径=新路径
    
    一些_file1.py

    导入全局变量
    def get_path():
    返回全局路径
    
    一些_file2.py

    import globals
    def get_path():
        return globals.PATH
    
    main.py

    导入全局变量
    如有需要:
    全局。修改路径(“新建/路径”)
    
    C Hecht谢谢你的回答,你能给出示例代码来说明这一点吗?我不知道这与在所有其他python文件中导入文件并在单个文件中进行更改有什么不同。要实现这一点,我需要从main.py本身执行我的其他python文件吗?我认为是这样的,但实际上我不能这样做,因为我正在运行shell脚本来构建我的项目,并且还有很多其他文件可以随时调用运行任何其他文件。我认为您需要清楚地了解您试图实现的目标。据我所知,您试图不修改实际文件,而只是在运行时修改一个变量。为此,您需要知道您的程序进入何处。将编辑一段示例代码,说明第二个选项,因为它更干净。对于完整的代码示例,请包括您自己的示例代码。因此,假设我有test.py和one.py文件。在one.py中,我声明x=5并打印它。现在根据你的答案,我应该在test.py中导入一个.py,我可以改变x=10的值。然后我可以执行one.py,它将与x=10一起工作。请看我对我的答案的编辑,并检查这是否足以让您理解。虽然我已经接受了答案,但如果其他人有一些想法可以分享,这将对所有人都有帮助。我可以投你一票。