【问题标题】:Passing dynamic file path in python [duplicate]在python中传递动态文件路径[重复]
【发布时间】:2019-01-15 10:35:54
【问题描述】:

我希望能够将文件路径作为参数传递给我的 python 函数。为了使我的代码可靠,如果任何其他开发人员要在他们的机器上运行我的代码,文件路径将根据用户名而改变。如何在 python 中动态地进行这种更改。

例如,我的函数采用以下参数:

def f_path(path):

my path will be : /Users/jame/Desktop/data-code/Testdata

我希望能够通过将我的名称“jame”更改为当前用户的名称来动态更改此文件路径。

【问题讨论】:

  • 所以您的路径类似于“/Users/USER_1/Desktop/data-code/Testdata”、“/Users/USER_2/Desktop/data-code/Testdata”、“/Users/USER_3/桌面/数据代码/测试数据”?意思是只有用户名改变了,其余的都保持不变?
  • 是的,正确的@Lossofhumanidentity
  • 这个问题真的不是我通过@Georgy查看过的任何问题的重复
  • 用户主路径之后的“Desktop/data-code/Testdata”部分不会减少重复。

标签: python python-2.7 filepath


【解决方案1】:

获取当前工作目录为

import os
current_directory = os.getcwd()

【讨论】:

    【解决方案2】:

    如果所有需要的路径都在表单中

    • /Users/USER_1/Desktop/data-code/Testdata

    • /Users/USER_2/Desktop/data-code/Testdata

    • /Users/USER_3/Desktop/data-code/Testdata

    因此,我们可以定义以下函数来完成这项工作:

    def foo(username):
        first = "/Users/"
        last = "/Desktop/data-code/Testdata"
        result = first + username + last 
        return result  
    

    此函数接受字符串用户名作为输入参数,并负责返回所需的感兴趣路径。

    示例:

    执行foo("Robert") 将导致/Users/Robert/Desktop/data-code/Testdata

    执行foo("David") 将导致/Users/David/Desktop/data-code/Testdata

    【讨论】:

      【解决方案3】:

      您可以使用 pathlib 获取您的主文件夹并使用它构建路径:

      from pathlib import Path
      
      # home would contain something like "/Users/jame"
      home = str(Path.home())
      
      path = home + "/Desktop/data-code/Testdata"
      

      或者,如果您想将用户的路径开头替换为正确的用户路径,并使用“翻译器”之类的内容:

      from pathlib import Path
      import re
      
      def f_path(path):
          """
          path: str full path, with user's home folder, 
                would be translated to current user's home folder,
                for example, "/Users/jane/some/path" would be translated to
                "/Users/tom/some/path", if current user is Tom.
          """
          # current home folder
          home = str(Path.home())
          # creating regular expression like "^/Users/[^/]+", for later use:
          path_reg = "^" + re.sub("[^/]+$", "", home) + "[^/]+"
          # replacing old home path part to a new one
          return re.sub(path_reg, home, path)
      

      它几乎可以在任何操作系统上运行。

      【讨论】:

        【解决方案4】:

        使用os模块:

        user_home_dir = os.path.expanduser('~')
        user = os.path.split(user_home_dir)[-1]
        os.path.join('/Users', user, 'Desktop/data-code/Testdata')
        #/Users\\User_1\\Desktop/data-code/Testdata'
        

        【讨论】:

          【解决方案5】:

          我做了以下事情:

          def get_json_location(username=os.getlogin()):
              first = "/Users/"
              last = "/Desktop/data-code/Testdata"
              result = first + username + last
              return result
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2023-03-31
            • 1970-01-01
            • 1970-01-01
            • 2022-01-24
            • 2014-11-17
            • 2021-08-25
            • 2015-08-29
            相关资源
            最近更新 更多