Скопировать каталог из пути в текущий каталог - PullRequest
0 голосов
/ 18 февраля 2020

Следующий код python берет список путей к конкретному экземпляру файла, чтобы скопировать их в текущий каталог с именем пути в заголовке:

python3 find.py --copy zz /Users/apt/testdir a.txt 
/Users/apt/testdir/d1/a.txt 
/Users/apt/testdir/d1/d3/a.txt 
/Users/apt/testdir/d1/d3/d4/a.txt 
/Users/apt/testdir/d1/d3/d5/a.txt
$ ls zz
Users_apt_testdir_d1_a.txt     
Users_apt_testdir_d1_d3_d4_a.txt
Users_apt_testdir_d1_d3_a.txt  
Users_apt_testdir_d1_d3_d5_a.txt

Все работает, но мой функция копирования:

def copy(f, new_dir):
   file_name=str(f[1:])
   file_name=file_name.replace('/', "_")
   file_path=os.path.join(new_dir, file_name)
   shutil.copy(file_path, new_dir)                                                                                         
   os.chdir(os.path.abspath(new_dir))
   os.rename(list(os.path.split(f))[1], file_name)

FileNotFoundError: [Errno 2] No such file or directory: "zz/['_u_macole_testdir_d1_d3_a.txt', '_u_macole_testdir_d1_d3_d4_a.txt', '_u_macole_testdir_d1_d3_d5_a.txt']

1 Ответ

0 голосов
/ 18 февраля 2020

Ошибка довольно очевидна, либо file, либо new_dir не имеет хорошего типа. Поскольку file является списком, вам нужно повторять и каждый раз вызывать copy: что-то вроде

def copy(f, new_dir):
   file_name=str(f[1:])
   file_name=file_name.replace('/', "_")
   file_path=os.path.join(new_dir, file_name)
   shutil.copy(file_path, new_dir)                                                                                         
   os.chdir(os.path.abspath(new_dir))
   os.rename(f, file_name)

for i in f:
   copy(i, new_dir)
...