python根据文件名中的文本字符将多个文件从一个文件夹移动到另一个文件夹

use*_*240 11 python python-2.7

我是Python的新手.我一直在探索这个shutil模块,并且可以移动一般的东西.我的问题围绕着:

想象一下,在导出文件夹中有数百个文件的场景.虽然所有文件都是不同的,但每个文件中有13个是针对特定供应商的.我想创建一个遍历导出文件夹的脚本,评估每个文件名,抓取所有Apple文件并将它们放入Apple文件夹,Intel文件并将它们放入英特尔文件夹等.任何智慧都将非常感激.

我试图在shutil副本中使用通配符,但没有任何运气.

谢谢,

JT

And*_*nis 16

我能想到的最简单的解决方案:

import shutil
import os

source = '/path/to/source_folder'
dest1 = '/path/to/apple_folder'
dest2 = '/path/to/intel_folder'

files = os.listdir(source)

for f in files:
    if (f.startswith("Apple") or f.startswith("apple")):
        shutil.move(f, dest1)
    elif (f.startswith("Intel") or f.startswith("intel")):
        shutil.move(f, dest2)
Run Code Online (Sandbox Code Playgroud)

目标文件夹确实需要存在.

  • `shutil.move` 不需要路径和文件名到 `f`,而不仅仅是文件名吗? (2认同)

use*_*148 2

假设文件名中有特定的字符串来标识报告与哪个供应商相关,您可以创建一个字典,将这些标识字符串映射到适当的供应商。例如:

import shutil
import os

path = '/path/to/location'

vendorMap = {'apple': 'Apple', 
             'intel': 'Intel', 
             'stringID3': 'vendor3'}

files = os.listdir(path)

for f in files:
    for key, value in vendorMap.iteritems():
        if key in f.lower():
            shutil.copy(f, path + '/' + value)
        else:
            print 'Error identifying vendor for', f
Run Code Online (Sandbox Code Playgroud)

这将在当前目录中创建一个文件夹,以适当的供应商命名,并将该供应商的报告复制到那里。请注意,此示例使用s.lower()方法,因此供应商名称是否大写并不重要。