Массовое переименование файлов с помощью Python - PullRequest
0 голосов
/ 10 мая 2018

У меня есть несколько files в разных папках, которые выглядят так:

cat - dog - bark.docx

Я хочу переименовать файлы, чтобы строка перед первым дефисом перемещалась в конец имени файла:

dog - bark - cat.docx

Вот что я получил до сих пор:

import os
path = input(‘Copy and paste the location of the files.’)
for filename in os.listdir(path):
  filename_without_ext = os.path.splitext(filename)[0]
  extension = os.path.splitext(filename)[1]
  str_to_move = filename.split('-')[0]
  new_filename = filename_without_ext.split('-')[1:] + ' - '+ str_to_move + extension
  os.rename(os.path.join(path, filename), os.path.join(path, new_filename))

Когда я запускаю код, появляется сообщение об ошибке

‘TypeError: can only concatenate list (not "str") to list’. I’d be very grateful if someone could tell me what I’m doing wrong.

Я новичок в программировании и Python (как вы, вероятно, можете сказать), так что будьте спокойны со мной.

Ответы [ 3 ]

0 голосов
/ 10 мая 2018
import os
path = input(‘Copy and paste the location of the files.’)
for filename in os.listdir(path):
  filename_without_ext = os.path.splitext(filename)[0]
  extension = os.path.splitext(filename)[1]
  parts_of_filename = filename_without_ext.split(' - ')
  new_filename = parts_of_filename[1] + ' - '+ parts_of_filename[2] + ' - ' + parts_of_filename[0] + extension
  os.rename(os.path.join(path, filename), os.path.join(path, new_filename))
0 голосов
/ 10 мая 2018

Ваша проблема в этой строке:

new_filename = filename_without_ext.split('-')[1:] + ' - '+ str_to_move + extension

Вы пытаетесь объединить строку в список. Вы предполагаете, что каждый элемент списка будет добавлен вместе перед вашим следующим утверждением. Код неоднозначен, так как вы можете либо захотеть этого, либо добавить свою подстроку к каждому элементу списка.

Вы хотите использовать join в качестве этого ответа сказал.

Итак:

'-'.join(filename_without_ext.split('-')[1:])

Хотя у вас все еще есть пробел в первой записи, о котором нужно беспокоиться. Поэтому вы можете вместо этого разделить на ' - '.

0 голосов
/ 10 мая 2018

Вы пытаетесь объединить список со строкой, которая не работает. Попробуйте заменить:

new_filename = filename_without_ext.split('-')[1:] + ' - '+ str_to_move + extension

с

new_filename = '-'.join(filename_without_ext.split('-')[1:]) + '-' + str_to_move + extension
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...