【问题标题】:Copy Zip files with string in name from one directory to another将名称为字符串的 Zip 文件从一个目录复制到另一个目录
【发布时间】:2020-01-21 19:53:05
【问题描述】:

我正在尝试构建一个脚本来将压缩文件从一个目录复制到另一个目录。 目前我有以下代码,可以使用所需的字符串_NLS跨解压缩文件进行复制,但不能复制压缩文件。

import shutil
import os

source = r"C:\\directoryA\\"
dest = r"C:\\directoryB\\"

for file in os.listdir(source):
    if '_NLS' in file.lower():

        if not os.path.exists(dest):
            os.makedirs(dest)

shutil.copyfile(source + file, dest + file)

这会移动解压后的文件,而不是压缩后的文件。

感谢您的帮助,

卢克

【问题讨论】:

  • 1.如果您使用原始字符串,请不要将反斜杠加倍。 3. 做os.path.join,不要手动“求和”路径。 3. 不能复制压缩文件是什么意思? Zip 文件是文件。如果 zip 文件的名称中有 _NLS,它将起作用。如果您指的是内容,那么显然它不会那样工作,因为 zip 文件是一个文件,而不是一个目录。
  • “跨压缩文件”到底是什么意思?从压缩文件到文件夹?从文件夹到压缩文件?在两个压缩文件之间?所有三个(和现有的)都根据源/目标是什么做“正确的事情”?您的代码中也有一些奇怪的地方,例如您正在寻找小写字符串中的NLS(大写),但它永远不会起作用。并且 copyfile 调用在循环之外,因此只会对迭代的最后一项进行操作。
  • 除此之外,您可能想看看zipfile.Path(类似于压缩文件中的pathlib.Path)和shutil.copyfileobj,它适用于文件-like对象,因此将与 zipfile 的伪文件对象兼容(由ZipFile.open 返回)。
  • 大家好,很抱歉造成混乱。已修改,抱歉浪费您的时间。

标签: python python-3.x


【解决方案1】:

主要的问题是根据 file.lower() 检查“_NLS”。它总是返回小写字母,因此是错误的。

第一次复制成功的原因是在循环中没有调用复制函数,因此只对列表中的最后一个文件调用了一次。请尝试以下操作:

import shutil
import os

source = r"source"
dest = r"dest"

if not os.path.exists(dest):
    os.makedirs(dest)

for file in os.listdir(source):
    if "_NLS" in file:
        shutil.copyfile(os.path.join(source, file), os.path.join(dest, file))

还可以使用os.path.join 加入您的文件路径以避免操作系统特定的错误。

【讨论】:

    猜你喜欢
    • 2012-02-15
    • 2017-12-11
    • 2017-11-18
    • 2013-06-01
    • 2020-06-22
    • 2014-08-12
    • 2013-10-24
    • 2011-10-24
    相关资源
    最近更新 更多