【问题标题】:File moving mistake with Python使用 Python 的文件移动错误
【发布时间】:2012-07-19 04:53:50
【问题描述】:

帮助!我正在编写一个脚本来通过移动具有某些扩展名的文件来组织我的桌面。它似乎工作正常,但是当我让它在我的桌面上松开时,发生了一些奇怪的事情。

因此,我将所有文件复制到动态创建的文件夹中,例如“PDFs”和“IMAGES”,但由于某种原因,当我运行脚本时,它没有创建文件夹而是创建文件,并继续将文件存储在另一个文件中。

我需要让这些人回来,但我不知道该怎么做。顺便说一句,我正在使用 Windows 7。下面是我的代码。任何帮助将不胜感激。

import shutil
import os

pwd = os.getcwd()
working_path = 'C:\\Users\\grayson\\Desktop'
wp = working_path
folders = {'pdf':'PDFS','img':'IMAGES'}

def main():
    create_folders();

    for d in os.walk(wp):
        files = d[2]
        break
    print files

    for filename in files:
        order_file( filename )


def create_folders():
    for fol in folders.keys():
        fol_name = folders[fol]
        if not os.path.isdir(fol_name):
            os.mkdir(fol_name)

def order_file(fname):
    split_name = fname.split('.')
    exten = split_name[len(split_name)-1]

    if exten == 'pdf':
        shutil.move(wp + '\\' + fname, wp + '\\' + folders['pdf'])
    elif exten == 'jpg' or exten == 'png' or exten == 'gif':
        shutil.move(wp + '\\' + fname, wp + '\\' + folders['img'])
    else:
        print 'Sumin else'

main()

【问题讨论】:

  • 让我猜猜,你没有从桌面目录中运行它吗?不幸的是,这个脚本造成的损害是不可逆转的。你想要一个解释你的脚本做错了什么的答案吗?
  • shutil.move(wp + '\\' + fname, wp + '\\' + folders['pdf']) 如果您没有从桌面运行脚本,此语句会将您的文件从文件名重命名为桌面上的 PDFS,其他移动语句也是如此

标签: python windows file extract


【解决方案1】:

这是一个非常笨拙的脚本,用于将文件移动到已排序的目录中。但这是我对出了什么问题的猜测。如果您没有使用 Desktop 作为当前工作目录运行此程序(意味着您在运行脚本时不在此目录中),那么这些文件夹是在其他位置创建的。然后当你的文件开始移动时,目录不存在,所以它只是将它们作为新文件相互移动。

很遗憾,您无法逆转这种伤害。你唯一的希望是你有备份。

让我更详细地解释一下你的脚本的某些部分...

pwd = os.getcwd()
working_path = 'C:\\Users\\grayson\\Desktop'

如果pwdworking_path 不同,则脚本中的一切都会出错。此外,您应该始终使用正斜杠,即使在 Windows 上也是如此。它有效且更容易构建路径:working_path = 'C:/Users/grayson/Desktop'

您的文件夹创建部分:

# BEFORE
def create_folders():
    for fol in folders.keys():
        fol_name = folders[fol]
        if not os.path.isdir(fol_name):
            os.mkdir(fol_name)

您不能确保这些目录实际上是在您的 working_path 变量下创建的。你可以这样写:

# AFTER
def create_folders():
    for fol_name in folders.itervalues():
        fol_path = os.path.join(working_path, fol_name)
        if not os.path.isdir(fol_path):
            os.mkdir(fol_path)

那里可能会救你。它会专门在 Desktop 下创建目录,而不是从您运行脚本的任何位置。

# BEFORE
split_name = fname.split('.')
exten = split_name[len(split_name)-1]

大量输入以获得扩展名。您可以通过以下方式使这更容易:

# AFTER
exten = fname.split('.')[-1]

最后是移动文件的部分:

# BEFORE
if exten == 'pdf':
    shutil.move(wp + '\\' + fname, wp + '\\' + folders['pdf'])
elif exten == 'jpg' or exten == 'png' or exten == 'gif':
    shutil.move(wp + '\\' + fname, wp + '\\' + folders['img'])
else:
    print 'Sumin else'

您通过添加斜杠来构建路径,并且仅将目标构建到目录名称。如果该目录不存在,它将假定它是一个文件。您应该已将其构建为特定的文件名:

# AFTER
src = os.path.join(wp, fname)
key = None

if exten == 'pdf':
    key = 'pdf'
elif exten in ('jpg', 'png', 'gif'):
    key = 'img'

if key:
    shutil.move(src, os.path.join(wp, folders['img'], fname))
else:
    print 'Sumin else'

这样如果目录不存在肯定会失败。

【讨论】:

  • 啊。你是对的。我知道这个脚本很糟糕(大约 5 分钟就写好了)。您是否有一般性的结构性建议可以使它不那么“尴尬”。我对 Python 了解不多。
【解决方案2】:

您没有以安全的方式创建目录。

你可以猜测,但也许你有以前尝试过的名为 PDFS 等的文件,并且没有创建目录。因此,您将所有图像一个接一个地“重命名”为 IMAGES ... 没有回头路。

我希望你事先备份。

【讨论】:

    猜你喜欢
    • 2018-10-07
    • 1970-01-01
    • 1970-01-01
    • 2015-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多