【问题标题】:Trouble with creating new folders/directories创建新文件夹/目录时遇到问题
【发布时间】:2019-05-23 19:25:58
【问题描述】:

我正在尝试制作一个程序,它可以抓取特定数据类型的文件夹,在该文件夹中创建一个新文件夹,并在其中复制该数据类型的每个文件。

我已经通过在另一个已经存在的文件夹中复制文件来使其工作,但我想一次性完成所有操作。这是到目前为止的代码:

import glob, os, shutil

def imageSearch(folder):
    newFolder = folder + '\\imgCopy'
    if not os.path.isdir(newFolder):
        os.makedirs(newFolder)
    files = glob.iglob(os.path.join(folder, '*.jpg'))
    for file in files:
        if os.path.isfile(file):
            shutil.copy2(file, newFolder)

print('Which folder are you crawling?')
imageSearch(input())

到目前为止没有错误消息,只是没有得到任何新的文件夹或文件。

【问题讨论】:

  • 也许您需要os.walk(folder) 来获取原始位置的所有文件夹和子文件夹。
  • 考虑将folder + '\\imgCopy' 更改为os.path.join(folder,'imgCopy')。使用此方法不是强制性的,如果您在一个操作系统上工作,斜杠\反斜杠可以工作,但如果您在路径中同时使用斜杠\反斜杠和os.path.join,代码看起来有些不一致
  • @Daweo 完全同意,在我的回答中使用了这个

标签: python python-3.x


【解决方案1】:

欢迎来到 StackOverflow。由于您是新来的,这是一个简单的问题,这里有一个完整的解决方案。

import glob, os, shutil

def imageSearch(folder, ext='jpg'):
    if os.path.isdir(folder):
        newFolder = os.path.join(folder, folder+'Copy')
        print(newFolder)
        if not os.path.isdir(newFolder):
            os.makedirs(newFolder)
        for file in glob.iglob(os.path.join(folder, '*.'+ext)):
            if os.path.isfile(file):
                shutil.copy2(file, newFolder)
    else:
        print("Folder does not exist.")

folder = input('Which folder are you crawling?\n')
ext = input('What file extension would you like to search for?\n')
imageSearch(folder, ext)

我现在将解释我做了什么。首先(修复你的代码的东西),我用newFolder = os.path.join(folder, folder+'Copy')替换了newFolder = folder + '\\imgCopy',因为os.path.join()会自动为你解决任何问题(文件夹是否以斜杠结尾?用户是否使用目录分隔的文件系统通过正斜杠还是反斜杠?)。我使用folder+'Copy' 以防文件夹未命名为img。我还删除了无关变量files,因为它只使用过一次。我在开始时添加了一个os.path.isdir() 以防止不存在的文件夹。最后,我允许使用可选参数 ext 自定义扩展。

在函数之外,我去掉了无关的print语句:input默认可以打印提示。

【讨论】:

  • 这修复了我一直犯的许多基本错误。谢谢!
猜你喜欢
  • 1970-01-01
  • 2013-10-04
  • 1970-01-01
  • 2011-09-30
  • 1970-01-01
  • 2020-10-08
  • 1970-01-01
  • 1970-01-01
  • 2020-08-25
相关资源
最近更新 更多