使用Python批量重命名文件

时间:2018-05-10 10:34:42

标签: python directory

我在各种文件夹中有多个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 :(得分:0)

您尝试将列表与不起作用的字符串连接起来。尝试更换:

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

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

答案 1 :(得分:0)

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))

答案 2 :(得分:0)

你的问题就在这一行:

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

您正在尝试将字符串连接到列表。您正在做的假设是列表中的每个元素将在您的下一个语句之前添加到一起。代码是不明确的,因为您可能想要,或者您可能想要将子字符串添加到列表的每个元素。

您希望join使用this answer表示。

所以:

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

虽然您仍然需要担心第一个条目的领先空间。因此,您可能希望改为' - '