【问题标题】:Matching File Names from a CSV file then move those Files to a New Directory匹配 CSV 文件中的文件名,然后将这些文件移动到新目录
【发布时间】:2020-12-22 07:13:40
【问题描述】:

我有一个装满文件的文件夹,例如 txt 文件、csv 文件、HTML 文件、pdf 文件。然后我有另一个 csv 文件,其中包含该文件夹中我需要的文件的名称。我想将文件移动到与 csv 文件“名称列”中的​​文件名匹配的另一个文件夹。

文件夹中的示例文件名:

doggy.csv
cattodog.txt
birdy.pdf
eagle.pdf
:
:
wolfy.pdf.txt.csv

我的 csv 文件:

ID  Name
001 doggy.csv
002 cattodog.txt
003 eagle.pdf
:
:
n  wolfy.pdf.txt.csv

我想知道是否有任何快速的方法可以创建一个代码,该代码可以遍历与我的 csv 文件中的“名称列”匹配的文件夹,然后将这些匹配文件移动到另一个文件夹?

谢谢!

【问题讨论】:

  • 您可以选择osshutil 包。据我了解,这与熊猫无关,因为它不会被矢量化。
  • 但我必须将我的 csv 文件读入 pandas,然后提取名称列以匹配我文件夹中的文件
  • 是的,你是对的。我想说的是,尽管您使用了 pandas,但您必须逐行应用或迭代。因此,它无助于矢量化。我建议你使用csv-shutil 组合不带熊猫。
  • 谢谢! @MohamedThasinah 我会努力做到这一点

标签: python pandas dataframe csv for-loop


【解决方案1】:

此代码可能会有所帮助:

import pandas as pd 
import shutil

my_csv = pd.read_csv('my_files.csv')

file_names = my_csv.Name.tolist()


for file_name in file_names:
    shutil.move("path/to/filesfolder/".join(file_name), "path/to/newfolder/".join(file_name))

另外,我建议将您的姓名保存在一个 txt 文件中,并使用 bash 对他们的文件进行 mv。

def save_to_txt(file_list):
    with open('file_names.txt', 'w+') as wfile:
        for file in file_list:
            wfile.write(file + '\n')

然后在你的命令行中:

for file in $(cat path/to/file_names.txt); do mv path/to/"$file" path/to/newfolder; done

【讨论】:

  • 非常感谢!我将尝试使用它并将其与我现有的代码结合起来。
【解决方案2】:

您可以先使用pandas 读取包含文件名的 csv 文件,然后循环遍历它:

import pandas as pd
import os, shutil

## read filenames using pandas
df_files = pd.read_csv("csvContainingFilestoMove.csv")

## set file locations
fileOrigin = "./" #file origin
fileDest="destinationPath/" #file destination

for ff in df['Name'].tolist():
    print(f"Moving file {ff}")
    shutil.move(fileOrigin+ff, fileDest) #shutil to move file

您还可以使用if not os.path.exists(fileDest+ff) 来检查目标文件是否已存在,以防您想使用copy 而不是move

【讨论】:

  • 太棒了!太感谢了。我会试试的。
猜你喜欢
  • 1970-01-01
  • 2021-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-08
  • 2017-09-16
  • 2021-03-14
  • 1970-01-01
相关资源
最近更新 更多