簡體   English   中英

使用python將文件復制到名稱與該文件幾乎相同的文件夾

[英]Using python, copy a file to a folder that has almost the same name as the file

我將嘗試解釋我要做什么,但是英語不是我的母語。

我有一個項目列表,例如["cat size", "house size", "car size"]和一些包含列表中項目名稱的文件。 例如cat.size.txthouse.size.fromBob.txt

我要執行以下復制:將cat.size.txt為目錄H:/new/2CopyTo/Cat size/並將house.size.fromBob.txt到目錄H:/new/2CopyTo/house size/

以下是我將文件復制到一個目錄中的操作,但是我希望每個文件都位於其自己的目錄中(在我的電腦上,該列表包含50個項目,因此不想手動進行操作)。

謝謝!!

import glob
import shutil
import os

#=========List of items
list = ["cat size","house size","car size"]

#=========directories
FromDir = "H:/New/1RecievedFiles/"
CopyDir = "H:/New/2CopyTo/"

#=========get list of items to be used in glob.glob
filesList = [x.replace(" ", "*")+"*.*" for x in list]

#=========get list of new files in FromDir, use filesList in glob.glob
listOfNew = [glob.glob(FromDir+item) for item in filesList ]
# returns [['H:/New/1RecievedFiles\\cat.size.txt'], ['H:/New/1RecievedFiles\\house.size.fromBob.txt']]    

#=========make a single list from the list in a list
listOfNewfiles = [item for sublist in listOfNew for item in sublist]
# returns ['H:/New/1RecievedFiles\\cat.size.txt', 'H:/New/1RecievedFiles\\house.size.fromBob.txt']

#=========copy files
[shutil.copy2(item, CopyDir) for item in listOfNewfiles]

我設置了一個測試目錄,如下所示:

$ ls -1
copyto/
car.size.txt
cat.size.txt
house.size.fromBob.txt

我相信這與您擁有的類似。 給定與您相同的清單,以下是我處理您的問題的方法:

import os, shutil
# lst not list -- naming it list overshadows a builtin
lst = ['cat size', 'house size', 'car size']
# PEP8 - lowercase with underscore here; CamelCase for classes
from_dir = os.path.abspath(os.path.expanduser('~/test'))
copy_dir = os.path.abspath(os.path.expanduser('~/test/copyto'))

to_copy = [f for f in os.listdir(from_dir) if os.path.isfile(f)]
# ['car.size.txt', 'house.size.fromBob.txt', 'cat.size.txt']

for filename in to_copy:
    needle = ' '.join(filename.split('.')[:2])
    if needle in lst:
        dest_dir = os.path.join(copy_dir, needle)
        os.mkdir(dest_dir)
        shutil.copy2(os.path.join(from_dir, filename), dest_dir)

此后,我的test目錄與之前顯示的完全相同,這是ls -R1 copyto的結果:

copyto:
car size/
cat size/
house size/

copyto/car size:
car.size.txt

copyto/cat size:
cat.size.txt

copyto/house size:
house.size.fromBob.txt

這對您的情況有用嗎? (PS-Python非常適合這種事情,不是嗎?)

遍歷您的列表,並檢查將其保存在何處的術語。 IE“貓”,“狗”或“房子”

像這樣的東西

import os,shutil

for item in list:
    if 'cat' in listitem:
        shutil.copyfile(source, 'H:/new/2CopyTo/cat size/')
    elif 'house' in listitem:
        shutil.copyfile(source, 'H.......etc etc
    elif 'car'.....

這就是你想要的嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM