将一些文件从子文件夹移动到 Python 中的另一个子文件夹
Moving some files from subfolder to another subfolder in Python
我尝试将目录 A 的每个子文件夹中的 3 个文件移动到目录 B 的每个空子文件夹中,这些文件的名称与子文件夹目录 A 的名称相同。我已经编写了代码,但文件被复制到所有子文件夹中。在这里,我向您展示我编写的示例和代码。谁能帮我解决这个问题?谢谢
For example I have folder A and B. I want to move 3 files from directory of A into the same name from subfolder directory A into directory B:
directory A:
- Subfolder 1:
- img_1.jpg
- img_2.jpg
- img_3.jpg
- img_4.jpg
- Subfolder 2:
- img_5.jpg
- img_6.jpg
- img_7.jpg
- img_8.jpg
directory B:
- Subfolder 1:
- empty
- Subfolder 2:
- empty
Expected Output
directory A:
- Subfolder 1:
- img_1.jpg
- Subfolder 2:
- img_5.jpg
directory B:
- Subfolder 1:
- img_2.jpg
- img_3.jpg
- img_4.jpg
- Subfolder 2:
- img_6.jpg
- img_7.jpg
- img_8.jpg
这是我写的代码
path = 'path_A/'
directory = 'path_B/'
for root, dirs, files in os.walk(path):
dirs.sort(key=int)
k = os.path.basename(root)
if files == []:
continue
i = 0
select = len(files) - 2 #select 1 files
for root2, dirs2, files2 in os.walk(directory):
for i,file in enumerate(files):
#print(file)
if i <= select:
print(file)
shutil.move(os.path.join(root, file), os.path.join(os.path.join(directory, root2), file))
提供的代码在我的系统上根本 运行 没有。我已将其修改为目录 A 的两个子文件夹中的每个子文件夹中的三个文件将被移动。
shutil.move(os.path.join(root, file), os.path.join(os.path.join(directory, root2), file))
在 shutil.move 调用中,您将文件移动到 root2,目录 B 的根位置。将 root2 替换为子文件夹(变量 k),它会将其正确复制到目录 B 的子文件夹中。
shutil.move(os.path.join(root, file), os.path.join(os.path.join(directory, k), file))
第二个目录上的第二个 os.walk 没有必要,因为它会尝试再次复制文件,导致异常,因为目录 A 中的文件已经被移动。
for root2, dirs2, files2 in os.walk(directory):
我附上了工作代码。如果要复制每个子文件夹中的所有文件,请在分配 select.
时删除 -1
import os
import shutil
path = 'C:\Users\alex\PycharmProjects\test\directoryA'
directory = 'C:\Users\alex\PycharmProjects\test\directoryB'
for root, dirs, files in os.walk(path):
dirs.sort()
k = os.path.basename(root)
if files == []:
continue
i = 0
select = len(files) - 1 # select 1 files
if not os.path.exists(os.path.join(directory, k)): # Check to see if the directory exists
os.mkdir(os.path.join(directory, k))
for i, file in enumerate(sorted(files)):
# print(file)
if i < select:
print(file)
shutil.move(os.path.join(root, file), os.path.join(os.path.join(directory, k), file))
我尝试将目录 A 的每个子文件夹中的 3 个文件移动到目录 B 的每个空子文件夹中,这些文件的名称与子文件夹目录 A 的名称相同。我已经编写了代码,但文件被复制到所有子文件夹中。在这里,我向您展示我编写的示例和代码。谁能帮我解决这个问题?谢谢
For example I have folder A and B. I want to move 3 files from directory of A into the same name from subfolder directory A into directory B:
directory A:
- Subfolder 1:
- img_1.jpg
- img_2.jpg
- img_3.jpg
- img_4.jpg
- Subfolder 2:
- img_5.jpg
- img_6.jpg
- img_7.jpg
- img_8.jpg
directory B:
- Subfolder 1:
- empty
- Subfolder 2:
- empty
Expected Output
directory A:
- Subfolder 1:
- img_1.jpg
- Subfolder 2:
- img_5.jpg
directory B:
- Subfolder 1:
- img_2.jpg
- img_3.jpg
- img_4.jpg
- Subfolder 2:
- img_6.jpg
- img_7.jpg
- img_8.jpg
这是我写的代码
path = 'path_A/'
directory = 'path_B/'
for root, dirs, files in os.walk(path):
dirs.sort(key=int)
k = os.path.basename(root)
if files == []:
continue
i = 0
select = len(files) - 2 #select 1 files
for root2, dirs2, files2 in os.walk(directory):
for i,file in enumerate(files):
#print(file)
if i <= select:
print(file)
shutil.move(os.path.join(root, file), os.path.join(os.path.join(directory, root2), file))
提供的代码在我的系统上根本 运行 没有。我已将其修改为目录 A 的两个子文件夹中的每个子文件夹中的三个文件将被移动。
shutil.move(os.path.join(root, file), os.path.join(os.path.join(directory, root2), file))
在 shutil.move 调用中,您将文件移动到 root2,目录 B 的根位置。将 root2 替换为子文件夹(变量 k),它会将其正确复制到目录 B 的子文件夹中。
shutil.move(os.path.join(root, file), os.path.join(os.path.join(directory, k), file))
第二个目录上的第二个 os.walk 没有必要,因为它会尝试再次复制文件,导致异常,因为目录 A 中的文件已经被移动。
for root2, dirs2, files2 in os.walk(directory):
我附上了工作代码。如果要复制每个子文件夹中的所有文件,请在分配 select.
时删除 -1import os
import shutil
path = 'C:\Users\alex\PycharmProjects\test\directoryA'
directory = 'C:\Users\alex\PycharmProjects\test\directoryB'
for root, dirs, files in os.walk(path):
dirs.sort()
k = os.path.basename(root)
if files == []:
continue
i = 0
select = len(files) - 1 # select 1 files
if not os.path.exists(os.path.join(directory, k)): # Check to see if the directory exists
os.mkdir(os.path.join(directory, k))
for i, file in enumerate(sorted(files)):
# print(file)
if i < select:
print(file)
shutil.move(os.path.join(root, file), os.path.join(os.path.join(directory, k), file))