作为Python初学者,我在移动文件时遇到了实际问题。下面是我终于完成的脚本(!),可以将选择的文件从所选目录移动到新文件夹。
由于某种我无法理解的原因,它只能工作一次,然后创建的目标文件夹确实很奇怪。一方面,它创建了一个“目录”,该目录是一个具有正确名称的未知应用程序;另一方面,它使用看似随机的文件来生成内容来创建文本文件-再次正确地创建了它创建的文件。

这是相关的脚本:

#!/usr/bin/python

import os, shutil

def file_input(file_name):
    newlist = []                                                #create new list
    for names in os.listdir(file_name):                         #loops through directory
        if names.endswith(".txt") or names.endswith(".doc"):    #returns only extensions required
            full_file_name = os.path.join(file_name, names)     #creates full file path name - required for further file modification
            newlist.append(full_file_name)                      #adds item to list
            dst = os.path.join(file_name + "/target_files")
            full_file_name = os.path.join(file_name, names)
            if (os.path.isfile(full_file_name)):
                print "Success!"
                shutil.copy(full_file_name, dst)

def find_file():
    file_name = raw_input("\nPlease carefully input full directory pathway.\nUse capitalisation as necessary.\nFile path: ")
    file_name = "/root/my-documents"                            #permanent input for testing!
    return file_input(file_name)
    '''try:
        os.path.exists(file_name)
        file_input(file_name)
    except (IOError, OSError):
        print "-" * 15
        print "No file found.\nPlease try again."
        print "-" * 15
        return find_file()'''

find_file()


有人可以告诉我为什么删除创建的文件夹并尝试再次运行该脚本时该脚本无法复制吗?

我知道这有点混乱,但这将是较大脚本的一部分,而我仍处于初稿阶段!

非常感谢

最佳答案

这有效:

import os, shutil

def file_input(file_name):
    newlist = []                                                #create new list
    for names in os.listdir(file_name):                         #loops through directory
        if names.endswith(".txt") or names.endswith(".doc"):    #returns only extensions required
            full_file_name = os.path.join(file_name, names)     #creates full file path name - required for further file modification
            newlist.append(full_file_name)                      #adds item to list
            dst = os.path.join(file_name + "/target_files")

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

            full_file_name = os.path.join(file_name, names)
            if (os.path.exists(full_file_name)):
                print "Success!"
                shutil.copy(full_file_name, dst)

def find_file():
    file_name = raw_input("\nPlease carefully input full directory pathway.\nUse capitalisation as necessary.\nFile path: ")
    file_name = "/home/praveen/programming/trash/documents"                            #permanent input for testing!
    return file_input(file_name)

find_file()


您需要检查您的复制目标目录是否实际存在,如果没有创建的话。 shutil.copy然后将文件复制到该目录

关于python - shutil.copy只工作一次,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20983193/

10-10 17:48