如何在Python中使用Regex或字符串格式移动文件



我是数据科学领域的初学者,正在python中进行数据预处理。然而,我正在使用Fingers数据集,所以我想移动图片,使每个图片都适合自己的目录,以便能够使用ImageDataGeneratorflowfromdirectory导入图片并应用重新缩放、翻转。。。etc

下面的代码显示了我要做的…

dataset_path = "/tmp/extracted_fingers/fingers"
train_set = os.path.join(dataset_path, "train/")
test_set = os.path.join(dataset_path, "test/")
for i in range(6):
os.mkdir("/tmp/extracted_fingers/fingers/train/" + str(i) + "L")
os.mkdir("/tmp/extracted_fingers/fingers/test/" + str(i) + "L")
for i in range(6):
os.mkdir("/tmp/extracted_fingers/fingers/train/" + str(i) + "R")
os.mkdir("/tmp/extracted_fingers/fingers/test/" + str(i) + "R")
L_0_tr = glob.glob(train_set + "*0L.png")
L_1_tr = glob.glob(train_set + "*1L.png")
L_2_tr = glob.glob(train_set + "*2L.png")
L_3_tr = glob.glob(train_set + "*3L.png")
L_4_tr = glob.glob(train_set + "*4L.png")
L_5_tr = glob.glob(train_set + "*5L.png")
R_0_tr = glob.glob(train_set + "*0R.png")
R_1_tr = glob.glob(train_set + "*1R.png")
R_2_tr = glob.glob(train_set + "*2R.png")
R_3_tr = glob.glob(train_set + "*3R.png")
R_4_tr = glob.glob(train_set + "*4R.png")
R_5_tr = glob.glob(train_set + "*5R.png")
L_0_ts = glob.glob(test_set + "*0L.png")
L_1_ts = glob.glob(test_set + "*1L.png")
L_2_ts = glob.glob(test_set + "*2L.png")
L_3_ts = glob.glob(test_set + "*3L.png")
L_4_ts = glob.glob(test_set + "*4L.png")
L_5_ts = glob.glob(test_set + "*5L.png")
R_0_ts = glob.glob(test_set + "*0R.png")
R_1_ts = glob.glob(test_set + "*1R.png")
R_2_ts = glob.glob(test_set + "*2R.png")
R_3_ts = glob.glob(test_set + "*3R.png")
R_4_ts = glob.glob(test_set + "*4R.png")
R_5_ts = glob.glob(test_set + "*5R.png")
shutil.move(L_0_tr, "0L")
shutil.move(L_1_tr, "1L")
shutil.move(L_2_tr, "2L")
shutil.move(L_3_tr, "3L")
shutil.move(L_4_tr, "4L")
shutil.move(L_5_tr, "5L")
shutil.move(R_0_tr, "0R")
shutil.move(R_1_tr, "1R")
shutil.move(R_2_tr, "2R")
shutil.move(R_3_tr, "3R")
shutil.move(R_4_tr, "4R")
shutil.move(R_5_tr, "5R")
shutil.move(L_0_ts, "0L")
shutil.move(L_1_ts, "1L")
shutil.move(L_2_ts, "2L")
shutil.move(L_3_ts, "3L")
shutil.move(L_4_ts, "4L")
shutil.move(L_5_ts, "5L")
shutil.move(R_0_ts, "0R")
shutil.move(R_1_ts, "1R")
shutil.move(R_2_ts, "2R")
shutil.move(R_3_ts, "3R")
shutil.move(R_4_ts, "4R")
shutil.move(R_5_ts, "5R")

现在这种方法可以完成这项工作,但我100%相信有更好的方法可以用更少的打字来完成,所以作为一个初学者,我正在努力做到…

我不知道它是否可以通过循环、Regex和字符串格式或任何其他方式来完成。。。

然而,如果有人能帮助我,我将不胜感激。。。

一点帮助是有益的。

提前谢谢。非常爱

注意:如果你愿意,我可以提供更多信息

我不知道它是否会有多大帮助,但您可以使用map内置函数来减少几行。

map(lambda x: shutil.move(glob.glob(train_set + "*"+str(x)+"R.png"),str(x)+"R"), range(0,6))
map(lambda x: shutil.move(glob.glob(train_set + "*"+str(x)+"L.png"),str(x)+"L"), range(0,6))
map(lambda x: shutil.move(glob.glob(test_set + "*"+str(x)+"R.png"),str(x)+"R"), range(0,6))
map(lambda x: shutil.move(glob.glob(test_set + "*"+str(x)+"L.png"),str(x)+"L"), range(0,6))

我找到了自己的方法,但是,如果有人需要,我会共享代码…

def moving_pics(files_set):
for i in range(0, 6):
direction = glob.glob(files_set + "*" + str(i) + "L.png")
for p in direction:
shutil.move(p, files_set + str(i) + "L")
for i in range(0, 6):
sec_direction = glob.glob(files_set + "*" + str(i) + "R.png")
for p2 in sec_direction:
shutil.move(p2, files_set + str(i) + "R")

然后将路径传递给函数参数

**注意:**您需要传递以"/"结尾的路径。

最新更新