我想知道在以下场景中使用路径的最佳做法是什么: 我可以选择将当前目录更改为所需的文件夹,然后仅使用文件名生成文件,或者直接使用完整路径。
以下是我设置当前目录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吗?
答案 0 :(得分:2)
相关代码的用例是什么?它是用户在命令行上调用的脚本吗?如果是这样,我通常将路径作为命令行参数(sys.argv
),作为命令行选项(argparse
),或使用某种配置文件。
或者是更通用的模块的文件路径部分?在这种情况下,我可能会考虑将路径和相关代码包装在类(class FooBar
)中。在实例化FooBar
时,模块的用户可以传入所需的文件路径信息。如果用户倾向于反复使用相同的路径,我将再次倾向于基于配置文件的策略。
无论哪种方式,文件路径都会与代码分开 - 至少对于真正的软件项目而言。
如果我们一直在谈论一个用户很少而且几乎没有未来发展或代码重用的可能性的一次性脚本,那么你所做的事情并不重要。
答案 1 :(得分:1)
正如@ lutz-horn所说,硬编码路径对于任何代码都不是好主意,除了单行脚本。
谈到设计,选择看似更明确,更简单的方法进行进一步开发,在运行时成为问题之前不要优化代码。
在特殊情况下,我更喜欢第二种方式。在编写一致文件之前无需chdir
。如果您正在编写具有不同名称模式的许多文件,则应使用显式chdir
。