【问题标题】:Change directory Vs. full path更改目录与​​。完整路径
【发布时间】:2015-02-10 11:04:06
【问题描述】:

我想知道在以下场景中使用路径的最佳做法是什么: 我可以选择将当前目录更改为所需的文件夹,然后仅使用文件名生成文件,或者直接使用完整路径。

这里是我设置当前目录os.chdir()的代码:

a=time.clock()
import os
for year in range(start,end):
    os.chdir("C:/CO2/%s" % year)
    with open("Table.csv",'r') as file:
        content=file.read()
b=time.clock()
b-a
Out[55]: 0.002037443263361638

这比直接使用完整路径时要慢:

a=time.clock()
for year in range(start,end):
    with open("C:/CO2/%s/Table.csv" % year,'r') as file:
        content=file.read()
b=time.clock()
b-a

Out[56]: 0.0014569102613677387

我仍然怀疑使用完整路径是否是一种好习惯。这两种方法都是跨平台的吗?我应该使用 os.path 而不是 %s 吗?

【问题讨论】:

  • 我怀疑将绝对部分 C:/CO2/ 放在代码中是个好主意。其余的都无所谓。
  • 我会使用 os.path.join
  • @LutzHorn,有时我会得到一个带有不一致斜杠分隔符的路径,例如 C:/CD2\\2001 将 chdir 到 C:/CD2 然后处理文件可能会更好吗?
  • @PadraicCunningham 你的意思是这个 os.chdir(os.path.join("C:","CD2")) ?

标签: python path operating-system


【解决方案1】:

相关代码的用例是什么?它是用户在命令行上调用的脚本吗?如果是这样,我通常会将路径作为命令行参数 (sys.argv)、命令行选项 (argparse) 或使用某种配置文件。

或者文件路径是更通用模块的一部分?在这种情况下,我可能会考虑将路径和相关代码包装在一个类中(class FooBar)。模块的用户可以在实例化FooBar 时传入所需的文件路径信息。如果用户倾向于一遍又一遍地使用相同的路径,我会再次倾向于基于配置文件的策略。

无论哪种方式,文件路径都会与代码分开——至少对于真正的软件项目而言。

如果我们谈论的是一个用户很少的一次性脚本,并且未来演变或代码重用的可能性几乎为零,那么你做什么并不重要。

【讨论】:

    【解决方案2】:

    正如@lutz-horn 所说,硬编码路径对于任何代码都不是一个好主意,除了单次运行脚本。

    谈到设计,选择看起来更明确和简单的方法进行进一步开发,在运行时间成为问题之前不要优化代码。

    在特定情况下,我更喜欢第二种方式。在您编写一致的文件之前,无需chdir。您应该使用显式的chdir,以防您编写许多具有不同名称架构的文件。

    【讨论】:

      猜你喜欢
      • 2021-09-24
      • 1970-01-01
      • 2010-10-14
      • 2019-02-24
      • 1970-01-01
      • 2019-08-30
      • 2015-02-27
      • 2011-03-20
      • 1970-01-01
      相关资源
      最近更新 更多