当我用python编写命令行脚本时,我假设可以从任何地方调用它。当我想将文件列表传递到脚本中时,这似乎导致不一致。
使用列表或通配符传递文件(无论是在Windows的* nix或glob.glob中由bash扩展),都将返回相对路径或绝对路径,具体取决于文件路径的描述方式,但这似乎给出必须检查或协调的两种不同行为。
如果脚本与要导入的文件位于同一目录中,则这并不是真正的问题,但是如果脚本位于不同的目录中,则似乎需要首先获取绝对路径:>
import os,sys,glob
for arg in sys.argv[1:]:
file_list = glob.glob(arg)
for fn in file_list:
print("File Reference: {}".format(os.path.abspath(fn)))
> pwd
/Users/user1/Desktop/script_dir/
> cd ~/Desktop
> script_dir/test.py test_dir/*.csv /Users/user1/Desktop/test_dir/*.txt
File Reference: /Users/user1/Desktop/test_dir/temp1.csv
File Reference: /Users/user1/Desktop/test_dir/temp2.csv
File Reference: /Users/user1/Desktop/test_dir/temp1.txt
File Reference: /Users/user1/Desktop/test_dir/temp2.txt
假设程序继续对文件进行处理,则它将按绝对路径操作它们。这是正确的做法吗?似乎很奇怪,而且我似乎可以找到所有列出这一点的参考文献。