[英]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.