我有我的jupyter笔记本(python脚本)在当前目录。在当前目录中,我有两个子文件夹,分别是a
和b
。在a
和b
两个目录中,我有相同数量的具有相同名称的.dat
文件。例如,目录a
中包含的文件分别是:x1-x1-val_1
、x1-x1-val_5
、x1-x1-val_11
…x1-x1-val_86
和x1-x2-val_1
,x1-x2-val_5
,x1-x2-val_11
…x1-x2-val_86
,即值在range(1,90,5)
中。同样,我在目录b
中有文件。
我想用我的python脚本访问a
和b
中的文件,对.dat
文件执行迭代操作。我现在的代码只有在我将目录a
或b
的文件保存在当前目录下才能工作。例如,我的脚本使用以下函数:
def get_info(test):
my_dict = {'test':test}
c = []
for i in range(1,90,5):
x_val = 'x_val_'+test+'-val_'+str(i)
y_val = 'y_val_'+test+'-val_'+str(i)
my_dict[x_val],my_dict[y_val]= np.loadtxt(test+'-val_'+str(i)+'.dat'
,usecols= (1,2),unpack=True)
dw = compute_yy(my_dict[x_val],my_dict[y_val],test)
c.append(dw)
my_dict.update({test+'_c'+:np.array(c)})
return my_dict
调用get_info()
:
tests = ['x1-x1', 'x1-x2']
new_dict = {}
for i in tests:
new_dict.update({i:get_info(i)})
我如何使用我的代码访问目录a
和/或b
中的文件?我知道这是关于提供正确的路径,但我不确定我该怎么做。我认为有一种方法是:
ext = '.dat'
for files in os.listdir(path_to_dir):
if files.endswith(ext):
print(files) # do operations
可以选择使用os.path.join()
。然而,我无法解决这个问题,这样我就可以使用相同的python脚本(也许是最小的变化),可以使用文件并迭代子文件夹a
和b
中的文件。感谢您的提前反馈!
如果你想在每个文件夹上分别运行get_info()
,那么你有两个方法:
:由@medium-dimensional在注释
中描述可以用os.chdir(folder)
修改Current Working Directory
。然后代码将运行在这个文件夹
中的文件使用print( os.getcwd() )
可以看到当前工作目录
os.chdir("a")
get_info(i)
os.chdir("..") # move back to parent folder
os.chdir("b")
get_info(i)
os.chdir("..") # move back to parent folder
chdir()
(类似于控制台的cd
命令)可以使用相对路径(r"a"
)完整路径(r"C:fullpathtoa"
)和..
移动到父文件夹(r"a..b"
)
如果文件可以在嵌套文件夹中,那么..
可能不会返回,您可以使用getcwd()
cwd = os.getcwd()
os.chdir("folder1/folder2/a")
get_info(i)
os.chdir(cwd) # move back to previous folder
os.chdir("folder1/folder2/b")
get_info(i)
os.chdir(cwd) # move back to previous folder
(BTW:在Linux上的控制台,您可以使用cd -
移动到上一个文件夹)
第二:打开文件
时使用文件夹每个获得filename的命令也可以获得folderfilename
的路径(它可以是相对路径,完整路径和..
的路径),如
r"afilename.dat"
r"C:fullpathtobfilename.dat"
r"a..bfilename.dat"
所以你可以用额外的选项folder
来定义函数
def get_info(text, folder):
并在读取文件
时使用此文件夹loadtxt(folder + r'' + test+'-val_'+str(i)+'.dat', ...)
或f-string
loadtxt(rf'{folder}{test}-val_{i}.dat', ...)
然后作为
运行get_info(i, "a")
get_info(i, "b")