簡體   English   中英

使用Python批量重命名文件

[英]Bulk renaming files with Python

我在各個文件夾中有多個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的新手(如您所知),所以對我輕松一點。

您正在嘗試使用無效的字符串連接列表。 嘗試更換:

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

new_filename = '-'.join(filename_without_ext.split('-')[1:]) + '-' + str_to_move + extension
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))

您的問題是這一行:

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

您正在嘗試將字符串連接到列表。 您所做的假設是,列表的每個元素都將在下一條語句之前添加在一起。 該代碼是模棱兩可的,因為您可能希望這么做,也可能想將子字符串添加到列表的每個元素中。

您想使用join回答這個問題

所以:

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

盡管您在第一次進入時仍然有領先的空間要擔心。 因此,您可能想用' - '分割。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM