2014-01-07 3 views
0

Как начинающий Python, у меня возникают реальные проблемы с перемещением файлов. Ниже приведен сценарий, в результате которого (!) Была сделана работа, которая просто перемещает выбранные файлы из выбранного каталога в новую папку. По какой-то причине, которую я не могу понять, он работал только один раз, а созданная папка назначения была действительно причудливой. В какой-то момент он создал «каталог», который был неизвестным приложением с правильным именем, а в других случаях он создает текстовый файл, используя, казалось бы, случайные файлы для создания контента - снова создаваемый файл правильно назван.shutil.copy работает только один раз

Вот соответствующий скрипт:

#!/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() 

Может кто-то пожалуйста, скажите мне, почему этот сценарий не воспроизводимым, когда я удалить папку, созданную и попробуйте запустить его снова, и что я могу сделать, чтобы это произошло?

Я знаю, что это немного грязно, но это будет частью более крупного сценария, и я все еще на первых этапах проекта!

Большое спасибо

+0

'if (os.path.isfile (full_file_name)):' проверяет наличие целевого файла. BTW, очистите свой код! Странные имена, ненужные круглые скобки, «возвращение» без причины, ... это не «немного грязно», это беспорядок. – Matthias

+0

Нет, он проверяет исходный файл, имя_файла никогда не изменяется или имена – praveen

+0

Извините, если он смутил вас, Маттиус. Как я уже сказал, это грубая копия в работе. Вы правы, хотя я должен был прибрать его до публикации, чтобы сделать все более ясным. Множество ненужных бит и «странных имен» позволяют мне следить за тем, что происходит, и не имеют отношения к этой части сценария или остались прежними попытками заставить его работать. Это первое сообщение, которое я сделал для SO, я приношу свои извинения за опоздание – user3103208

ответ

0

Это работает:

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 скопирует ваш файл в этот каталог

+0

Спасибо, Правэ! Это было немного. Я запутался с функцией shutil - вся документация, которую я видел, говорит, что папка назначения не должна существовать, прежде чем пытаться ее отправить! Методом проб и ошибок!! – user3103208

Смежные вопросы