如何将列表与文件名匹配,然后将匹配的文件移动到 Python 中的新目录?
How to match a list to file names, then move matched files to new directory in Python?
我有一个包含 90,000
PDF 文档 的文件夹,其中包含顺序数字标题 (e.g. 02.100294.PDF)
。我从该文件夹中提取了大约 70,000
文章标题 的列表。我想构建一个 Python 程序,将列表中的标题与文件夹中的标题进行匹配,然后将匹配的文件移动到 new
文件夹中。
例如,假设我在 "FOLDER";
中有以下文件
1.100.PDF
1.200.PDF
1.300.PDF
1.400.PDF
然后,我有一个包含以下标题的列表
1.200.PDF
1.400.PDF
我想要一个程序将列表 (1.200 and 1.400)
中的两个文档标题与 FOLDER 中的文档相匹配,然后将这两个文件移动到 "NEW_FOLDER"。
- 知道如何在 Python 中执行此操作吗?
谢谢!
编辑:这是我目前拥有的代码。源目录是 'scr','dst' 是新的目的地。 "Conden_art" 是我要移动的文件列表。我正在尝试查看 'scr' 中的文件是否与 'conden_art' 中列出的名称匹配。如果是,我想将其移动到 'dst'。现在,代码找不到匹配项,只打印 'done'。这个问题不同于仅仅移动文件,因为我需要将文件名匹配到一个列表,然后移动它们。
import shutil
import os
for file in scr:
if filename in conden_art:
shutil.copy(scr, dst)
else:
print('done')
已解决!
这是我使用的最终有效的代码。感谢您的帮助!
import shutil
import os
import pandas as pd
scr = filepath-1
dst = filepath-2
files = os.listdir(scr)
for f in files:
if f in conden_art:
shutil.move(scr + '\' + f, dst)
这是一种方法 -
from os import listdir
from os.path import isfile, join
import shutil
files = [f for f in listdir(src) if isfile(join(src, f))] # this is your list of files at the source path
for i in Conden_art:
if i in files:
shutil.move(i,dst+i) # moving the files in conden_art to dst/
src
和 dst
这是您的源路径和目标路径。确保您位于 运行 for
循环之前的 src
路径。否则,python 将无法找到该文件。
与其循环遍历源目录中的文件,循环遍历您已有的文件名会更快。您可以使用 os.path.exists()
检查文件是否可以移动。
from os import path
import shutil
for filename in conden_art:
src_fp, dst_fp = path.join(src, filename), path.join(dst, filename)
if path.exists(filepath):
shutil.move(src_fp, dst_fp)
print(f'{src_fp} moved to {dst}')
else:
print(f'{src_fp} does not exist')
我有一个包含 90,000
PDF 文档 的文件夹,其中包含顺序数字标题 (e.g. 02.100294.PDF)
。我从该文件夹中提取了大约 70,000
文章标题 的列表。我想构建一个 Python 程序,将列表中的标题与文件夹中的标题进行匹配,然后将匹配的文件移动到 new
文件夹中。
例如,假设我在 "FOLDER";
中有以下文件1.100.PDF
1.200.PDF
1.300.PDF
1.400.PDF
然后,我有一个包含以下标题的列表
1.200.PDF
1.400.PDF
我想要一个程序将列表 (1.200 and 1.400)
中的两个文档标题与 FOLDER 中的文档相匹配,然后将这两个文件移动到 "NEW_FOLDER"。
- 知道如何在 Python 中执行此操作吗?
谢谢!
编辑:这是我目前拥有的代码。源目录是 'scr','dst' 是新的目的地。 "Conden_art" 是我要移动的文件列表。我正在尝试查看 'scr' 中的文件是否与 'conden_art' 中列出的名称匹配。如果是,我想将其移动到 'dst'。现在,代码找不到匹配项,只打印 'done'。这个问题不同于仅仅移动文件,因为我需要将文件名匹配到一个列表,然后移动它们。
import shutil
import os
for file in scr:
if filename in conden_art:
shutil.copy(scr, dst)
else:
print('done')
已解决!
这是我使用的最终有效的代码。感谢您的帮助!
import shutil
import os
import pandas as pd
scr = filepath-1
dst = filepath-2
files = os.listdir(scr)
for f in files:
if f in conden_art:
shutil.move(scr + '\' + f, dst)
这是一种方法 -
from os import listdir
from os.path import isfile, join
import shutil
files = [f for f in listdir(src) if isfile(join(src, f))] # this is your list of files at the source path
for i in Conden_art:
if i in files:
shutil.move(i,dst+i) # moving the files in conden_art to dst/
src
和 dst
这是您的源路径和目标路径。确保您位于 运行 for
循环之前的 src
路径。否则,python 将无法找到该文件。
与其循环遍历源目录中的文件,循环遍历您已有的文件名会更快。您可以使用 os.path.exists()
检查文件是否可以移动。
from os import path
import shutil
for filename in conden_art:
src_fp, dst_fp = path.join(src, filename), path.join(dst, filename)
if path.exists(filepath):
shutil.move(src_fp, dst_fp)
print(f'{src_fp} moved to {dst}')
else:
print(f'{src_fp} does not exist')