[英]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.txt
和house.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.