如何将zip文件移动到文件夹

时间:2016-06-09 06:48:19

标签: python zip

我有一个很大的没有。 zip文件的名称只是数字。现在每个zip文件包含一个与zip文件同名的文件夹(即如果zip文件的名称是1234.zip,那么文件夹的名称也将是1234)。此文件夹还包含一个文本文件,例如atextfile.txt,其中包含指定zip表示2016年的整数 现在我想将每个zip文件移动到相应的文件夹,即年份。意思是我想要做的是提取年份的值,即2016年,并创建一个名为2016的文件夹,将zip文件移动到该文件夹​​,并对下一个zip文件执行相同操作。
我成功地检索了年份并将其存储在名为year的变量中 我到目前为止编写的代码:

    import glob
    import os
    import zipfile
    import shutil
    for zip_name in glob.glob('[0-9]*.zip'):
        z=zipfile.ZipFile(zip_name)
        # To remove '.zip' from the name of zip_name
        subdir = zip_name[:-4]
        with z.open('{}/atextfile.txt'.format(subdir)) as f:
            for line in f:
                for word in line:
                    year = word
                    # the file atextfile.txt has many lines containing many                        integer of which the first line represents the year.
                    break
                else:
                    continue
                break
        z.close()
        if not os.path.exists(year):
            os.makedirs(year)
        shutil.move(zip_name, year)


这是错误:
WindowsError:[错误32]进程无法访问该文件,因为它正被另一个进程使用。
我搜索了它,我才知道这背后的原因是因为我的zip文件已经打开。但我无法解决这个问题,所以请帮忙 更新:问题解决了我将zip_name和year存储在一个文本文件中,然后在另一个程序中读取文本文件并将相应的zip文件移动到其年份文件夹。感谢您的回复。

2 个答案:

答案 0 :(得分:0)

  

尝试使用subprocess和ROBOCOPY:

import glob
import os
import zipfile
import subprocess

for zip_name in glob.glob('[0-9]*.zip'):
    z = zipfile.ZipFile(zip_name)
    # To remove '.zip' from the name of zip_name
    subdir = zip_name[:-4]
    with z.open('{}/atextfile.txt'.format(subdir)) as f:
        for line in f:
            for word in line:
                year = word
                break
            else:
                continue
            break
    z.close()
    if not os.path.exists(year):
        os.makedirs(year)
    command = 'ROBOCOPY {} {} /S /MOVE'.format(zip_name, year)
    subprocess.call(command)

答案 1 :(得分:0)

以下对我有用,你今年获得这一年的方式似乎有问题。

import glob
import os
import zipfile
import shutil

for zip_name in glob.glob('[0-9]*.zip'):
    z = zipfile.ZipFile(zip_name)
    subdir = os.path.splitext(zip_name)[0]

    with z.open('{}/atextfile.txt'.format(subdir)) as f:
        for line in f:
            line = line.strip()
            if line.lower().startswith("date"):
                year = line.split('-')[-1]
                break

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

    z.close()
    shutil.move(zip_name, year)

此外,最好使用os.path.splitext()功能来提取zip_name