匹配 CSV 文件中的文件名,然后将这些文件移动到新目录
Posted
技术标签:
【中文标题】匹配 CSV 文件中的文件名,然后将这些文件移动到新目录【英文标题】:Matching File Names from a CSV file then move those Files to a New Directory 【发布时间】: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 文件中的“名称列”匹配的文件夹,然后将这些匹配文件移动到另一个文件夹?
谢谢!
【问题讨论】:
您可以选择os
或shutil
包。据我了解,这与熊猫无关,因为它不会被矢量化。
但我必须将我的 csv 文件读入 pandas,然后提取名称列以匹配我文件夹中的文件
是的,你是对的。我想说的是,尽管您使用了 pandas,但您必须逐行应用或迭代。因此,它无助于矢量化。我建议你使用csv-shutil
组合不带熊猫。
谢谢! @MohamedThasinah 我会努力做到这一点
【参考方案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
【讨论】:
太棒了!太感谢了。我会试试的。以上是关于匹配 CSV 文件中的文件名,然后将这些文件移动到新目录的主要内容,如果未能解决你的问题,请参考以下文章
从 CSV/TXT 创建文件夹并将匹配列移动到 Powershell 或 Batch 中的新目录