如何在python中使用子目录的数据文件并进行迭代操作



我有我的jupyter笔记本(python脚本)在当前目录。在当前目录中,我有两个子文件夹,分别是ab。在ab两个目录中,我有相同数量的具有相同名称的.dat文件。例如,目录a中包含的文件分别是:x1-x1-val_1x1-x1-val_5x1-x1-val_11x1-x1-val_86x1-x2-val_1,x1-x2-val_5,x1-x2-val_11x1-x2-val_86,即值在range(1,90,5)中。同样,我在目录b中有文件。

我想用我的python脚本访问ab中的文件,对.dat文件执行迭代操作。我现在的代码只有在我将目录ab的文件保存在当前目录下才能工作。例如,我的脚本使用以下函数:

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脚本(也许是最小的变化),可以使用文件并迭代子文件夹ab中的文件。感谢您的提前反馈!

如果你想在每个文件夹上分别运行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")

相关内容

  • 没有找到相关文章

最新更新