Python 如何正确设置循环开头的格式?

Python 如何正确设置循环开头的格式?,python,loops,iteration,dropbox,Python,Loops,Iteration,Dropbox,我有一个我为自己和同事设计的程序,所有数据都存储在一个目录中。然而,我想建立一个循环,让它对我和他都有效。我尝试了所有这些: file_location = glob.glob('/../*.nc') file_location = glob('/../*.nc') 但他们没有一个人在收集任何文件。如何修复此问题?您可以使用获取相对于用户住宅的目录(在函数调用中称为~)。在你的情况下,线路是 file_location = glob.glob(os.path.expanduser('~/Dro

我有一个我为自己和同事设计的程序,所有数据都存储在一个目录中。然而,我想建立一个循环,让它对我和他都有效。我尝试了所有这些:

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

但他们没有一个人在收集任何文件。如何修复此问题?

您可以使用获取相对于用户住宅的目录(在函数调用中称为
~
)。在你的情况下,线路是

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

您可以使用获取相对于用户家的目录(在函数调用中称为
~
)。在你的情况下,线路是

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

通常情况下,不硬编码路径是一种良好的做法。如果要将路径用于其他需要格式良好的路径的任务(即:子流程,将路径写入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])

该示例显示了错误路径和格式良好路径之间的比较。这两种方法都可行,但从长远来看,好的路径将更加灵活和可移植。

如果要将路径用于其他需要格式良好的路径(即:子流程,将路径写入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])

该示例显示了错误路径和格式良好路径之间的比较。这两种方法都可以使用,但从长远来看,好的路径将更加灵活和可移植。

如果使用“相对路径”(如
。/
),则需要确保在每个用户的机器上从相同的“相对”位置运行脚本。
epsuser
是您的用户名吗?执行类似于
glob.glob(os.path.expanduser('~/Dropbox/Argo/Data/*.nc'))
的操作怎么样?如果您使用的是相对路径,则取决于运行程序时当前的工作目录。由于绝对路径工作正常,您的当前目录可能不在“/Users/epsuser”之下。另外,您尝试的前两个备选方案也不起作用,初始“/”表示根目录,上面没有任何内容,因此他们都尝试使用不存在的“/Dropbox/Argo/Data/*.nc”。您在标题中指的是什么“循环”?您的意思是“路径名的开头”吗?这有助于了解您是尝试相对于当前目录所在的位置访问“Dropbox/Argo/Data/*.nc”,还是尝试相对于当前用户的主目录访问它。是否可能是第二个?如果您使用的是“相对路径”(如
。/
),则需要确保您在每个用户的计算机上从相同的“相对”位置运行脚本。
epsuser
是您的用户名吗?执行类似于
glob.glob(os.path.expanduser('~/Dropbox/Argo/Data/*.nc'))
的操作怎么样?如果您使用的是相对路径,则取决于运行程序时当前的工作目录。由于绝对路径工作正常,您的当前目录可能不在“/Users/epsuser”之下。另外,您尝试的前两个备选方案也不起作用,初始“/”表示根目录,上面没有任何内容,因此他们都尝试使用不存在的“/Dropbox/Argo/Data/*.nc”。您在标题中指的是什么“循环”?您的意思是“路径名的开头”吗?这有助于了解您是尝试相对于当前目录所在的位置访问“Dropbox/Argo/Data/*.nc”,还是尝试相对于当前用户的主目录访问它。也许是第二个?更丑陋,但肯定更多portable@jphollowed嗯,被接受的答案会在我的windows框上崩溃,所以我肯定更喜欢我的“丑陋”方式;)@BPL您运行的windows的哪个版本不支持将
/
作为路径分隔符?@RoadieRich我已经进一步阐述了我的答案。事实上,
/
将由windows正常处理。。。但是,硬编码路径可能会带来很多麻烦,这取决于哪些路径更有用,但肯定更多portable@jphollowed嗯,被接受的答案会在我的windows框上崩溃,所以我肯定更喜欢我的“丑陋”方式;)@BPL您运行的windows的哪个版本不支持将
/
作为路径分隔符?@RoadieRich我已经进一步阐述了我的答案。事实上,
/
将由windows正常处理。。。但是硬编码路径可能会带来很多麻烦,这取决于它的用途