Python 有选择地将文件从一个文件夹目录复制到另一个文件夹目录

Python 有选择地将文件从一个文件夹目录复制到另一个文件夹目录,python,python-3.x,file,Python,Python 3.x,File,我有一个目录树,其中文件夹的名称非常重要。我还有一个来自folder1>folder2>folder3>foo.txt的csv语句。folder1、folder2、folder3和txt都在csv的不同列中。我需要保持目录结构不变,并复制csv中给出的文件 我尝试的方法是复制目录树并编写python代码来删除不需要的文件。所以有很多循环,但我在csv中有超过415000行 csv example:<br/> pdf_no . folder1. folder2 . folder3.

我有一个目录树,其中文件夹的名称非常重要。我还有一个来自folder1>folder2>folder3>foo.txt的csv语句。folder1、folder2、folder3和txt都在csv的不同列中。我需要保持目录结构不变,并复制csv中给出的文件

我尝试的方法是复制目录树并编写python代码来删除不需要的文件。所以有很多循环,但我在csv中有超过415000行

csv example:<br/>
pdf_no .   folder1. folder2 . folder3. <br/> 1 .  . abc. pqr. xyz.<br/>
这是csv的格式,我对在python中借助pandas dataframe提取列数据没有问题。最初它是一个.dta文件,我用pandas转换成.csv。因此“folder1”>“folder 2”>“folder 3”>“pdf_no.”列包含文件名,这是我们希望在给定文件夹中维护文件结构的数字

所以这需要很多时间,每次我再做一点修改都需要很多时间,我甚至不知道它是否正确。

你需要这种方法。以下是您可以做的:

阅读您的CSV 使用os.path.join构建文件路径 用于将文件及其父目录复制到目标 当目标文件已经存在时,您可能需要添加一个try…except块以避免操作错误,或者在复制新文件之前删除目标文件。

Sample csv 示例代码 解释 其实你不需要熊猫,你只需要

csv.reader将csv文件读入列表 这个方法类似于bash中的mkdir-p os.path.join shutil.copy2将文件复制到新文件夹 确保原始文件存在
我已经测试了上面的代码。它应该能工作。

谢谢,它能工作!但问题是当它抛出fileexisterror:[Errno 17]文件存在时:因为它试图再次创建文件夹。复制第一个文件时已创建该文件夹,但当第二个文件进入同一文件夹时,该文件夹表示已存在。使用os.path.isdir检查目录是否存在。谢谢你!
pdf_no,folder1,folder2,folder3
1,abc,def,ghi
2,xyz,pqr,
3,abc,def,ghi
import csv
import os
import shutil


target_csv = 'selection.csv'
target_dir = 'selected_20190828/'
source_dir = 'original_directory/'

with open(target_csv) as f:
    rows = csv.reader(f)
    for line_no, row in enumerate(rows):
        if line_no == 0:  # Skip the first line because it's the title
            continue

        pdf_name = row[0] + '.pdf'
        dir_path = os.path.join(*row[1:])

        source = os.path.join(source_dir, dir_path, pdf_name)
        if not os.path.isfile(source):
            print('not exist: ', line_no, source)
            continue
        target = os.path.join(target_dir, dir_path)
        os.makedirs(target)
        shutil.copy2(source, target)