如何以最有效的方式根据数据框中的条件传输文件集合
how to transfer a collection of files based on criteria in data frame in the most efficient way
可能我选择的科目不是一个好科目。但我会非常清楚地解释。我的目的是想出最有效的方法,因为文件数量很大,可能需要很长时间。
我有一个包含很多文件(300K)的文件夹。这些文件有名字。他们名字中的模式是这样的:
09060083_1542296310_2_CON_ENT-Floor-Practice_2015-09-25-false_MRB3738.txt
在这个文件的名称中,有一件事对我很重要:
09060083
我简单提取了
我也有一个数据框。我的数据框如下所示:
Clinic Number 6month
1 09060083 1
2 494383 4
13 494383 4
14 494383 1
17 494382 9
21 494382 4
25 494383 4
28 494383 4
29 994381 5
30 994383 10
门诊号与文件名第1-8位相同。现在我想根据一些条件将一些文件传输到另一个文件夹。
我的文件夹名称基于数据框中的 6month column
。所以我有 10 个文件夹名称 1 2 3... 10.
我做这个的简单方法是提取文件名的字符1到8,然后与数据框中的Clinic Number column
比较,如果他们同样传输到该行相应名称为 6month column
的文件夹。
但我想这需要很长时间。我正在寻找最有效的方法。使用我的方法,它几乎很棒,因为它需要为每个文件遍历整个数据帧。
提前致谢
您可以找到重复的诊所条目,然后将相应的文件移动到相应的文件夹。
例如如果你的 df 像
Clinic_Num 6month Filename
09060083 1 09060083_blah
494383 4 494383_blah1
494383 4 494383_blah2
494383 1 494383_blah3
Select 所有重复行:
df_to_be_moved = df[df.duplicated(subset='Clinic_Num')]
现在,您的 df_to_moved 将像:
Clinic_Num 6month Filename
494383 4 494383_blah2
494383 1 494383_blah3
现在您可以根据目标文件夹 select 行并获取该文件夹的文件路径列表并移动它们。
import os, shutil
BASE_PATH = "C:\Users\M193053\Documents\"
for idx in range(1,11): # folder name
folder_name = os.path.join(BASE_PATH, "folder_"+str(idx))
os.makedirs(folder_name, exist_ok=True)
matches = df_to_be_moved[df_to_be_moved['6month']==idx].Filename.tolist()
matches = [os.path.join(BASE_PATH, filename) for filename in matches]
for file in matches:
shutil.move(file, folder_name)
可能我选择的科目不是一个好科目。但我会非常清楚地解释。我的目的是想出最有效的方法,因为文件数量很大,可能需要很长时间。
我有一个包含很多文件(300K)的文件夹。这些文件有名字。他们名字中的模式是这样的:
09060083_1542296310_2_CON_ENT-Floor-Practice_2015-09-25-false_MRB3738.txt
在这个文件的名称中,有一件事对我很重要:
09060083
我简单提取了
我也有一个数据框。我的数据框如下所示:
Clinic Number 6month
1 09060083 1
2 494383 4
13 494383 4
14 494383 1
17 494382 9
21 494382 4
25 494383 4
28 494383 4
29 994381 5
30 994383 10
门诊号与文件名第1-8位相同。现在我想根据一些条件将一些文件传输到另一个文件夹。
我的文件夹名称基于数据框中的 6month column
。所以我有 10 个文件夹名称 1 2 3... 10.
我做这个的简单方法是提取文件名的字符1到8,然后与数据框中的Clinic Number column
比较,如果他们同样传输到该行相应名称为 6month column
的文件夹。
但我想这需要很长时间。我正在寻找最有效的方法。使用我的方法,它几乎很棒,因为它需要为每个文件遍历整个数据帧。
提前致谢
您可以找到重复的诊所条目,然后将相应的文件移动到相应的文件夹。
例如如果你的 df 像
Clinic_Num 6month Filename
09060083 1 09060083_blah
494383 4 494383_blah1
494383 4 494383_blah2
494383 1 494383_blah3
Select 所有重复行:
df_to_be_moved = df[df.duplicated(subset='Clinic_Num')]
现在,您的 df_to_moved 将像:
Clinic_Num 6month Filename
494383 4 494383_blah2
494383 1 494383_blah3
现在您可以根据目标文件夹 select 行并获取该文件夹的文件路径列表并移动它们。
import os, shutil
BASE_PATH = "C:\Users\M193053\Documents\"
for idx in range(1,11): # folder name
folder_name = os.path.join(BASE_PATH, "folder_"+str(idx))
os.makedirs(folder_name, exist_ok=True)
matches = df_to_be_moved[df_to_be_moved['6month']==idx].Filename.tolist()
matches = [os.path.join(BASE_PATH, filename) for filename in matches]
for file in matches:
shutil.move(file, folder_name)