使用python,将文件复制到与文件名几乎相同的文件夹中
我会尽量解释我想做的事情,但我的英语不是很好。
我有一个物品列表,比如说 ["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]
2 个回答
0
遍历你的列表,检查每个项的分类,看看它要保存到哪里。比如说,可能是'猫'、'狗'或者'房子'。
可以像这样做:
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'.....
这就是你想要的吗?
3
我设置了一个测试目录,结构如下:
$ 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
这样做适合你的情况吗?(顺便说一句,Python 在这种事情上真是太棒了,不是吗?)