2016-08-11 18 views
0

这是一个非常简单的问题(讽刺的原因我不能回答:/)。我有一个我自己和我的同事设计的程序,所有的数据都存储在一个目录中。但是,我想设置循环,以便它对我和他都有效。我试过所有这些:如何正确地格式化开始一个循环?

file_location = glob.glob('/../*.nc') 
file_location = glob('/../*.nc') 

但他们都没有拿起任何文件。我怎样才能解决这个问题?干杯!

+0

如果您使用的是'相对路径'(如'../'),您需要确保您在每个用户的机器上以相同'相对'位置运行脚本。 – nbryans

+0

'epsuser'是你的用户名吗?怎么做'glob.glob(os.path.expanduser('〜/ Dropbox/Argo/Data/*。nc'))''? – Anonymous

+0

如果您使用相对路径,它将取决于您运行程序时当前的工作目录。由于绝对路径工作正常,很可能您的当前目录不在“/ Users/epsuser”下面。此外,您尝试的前两个选项不起作用,最初的“/”表示根目录,并且上面没有任何内容,所以它们都在尝试“/Dropbox/Argo/Data/*.nc”,它不会不存在。 –

回答

4

您可以使用os.path.expanduser()获取相对于用户家中的目录(在函数调用中称为~)。在你的情况下,该行会

file_location = glob.glob(os.path.expanduser('~/Dropbox/Argo/Data/*.nc')) 
+0

谢谢,这工作! – jstack

2

通常不是硬编码的路径,如果你会用你的路径,这就需要形成良好的路径(即其他任务一个很好的做法:子,写作路径shell脚本),我建议使用os.path模块管理路径,例如:

import os, glob 

home_path = os.path.expanduser("~") 
dropbox_path = os.path.join(home_path, "Dropbox") 
good_paths = glob.glob(os.path.join(dropbox_path,"Argo","Data","*.nc")) 
bad_paths = glob.glob(dropbox_path+"/Argo\\Data/*.nc") 

print len(good_paths)==len(bad_paths) 
print all([os.path.exists(p) for p in good_paths]) 
print all([os.path.exists(p) for p in bad_paths]) 

该示例显示了不良路径和良好路径之间的比较。他们两个都会工作,但good_paths将会更加灵活,可以长期使用。

+0

丑陋的,但肯定更便携 – Anonymous

+0

@jphollowed好吧,接受的答案会崩溃在我的窗口框,所以我绝对更喜欢我的“丑陋”的方式;) – BPL

+1

@BPL你运行的Windows版本不支持'/ '作为路径分隔符? – RoadieRich