【问题标题】:Changing name of multiple files with conditions使用条件更改多个文件的名称
【发布时间】:2017-04-23 18:42:29
【问题描述】:

我在我的电脑上下载了一些节目的剧集,但标题完全混淆了,所以很难找到我想要的剧集,我不想参考 wiki 找出哪一集是哪一集

由于剧集太多无法单独重命名,我决定使用python一次重命名,使用json表存储正确的剧集名称进行比较和替换(剧集都有它们的季节编号和剧集编号,以便我可以使用它进行比较)

目前,我有这个:

import os
import sys
from random import randint as mathRandom
nameDict={}

#nameDict["Ed.Edd.n.Eddy.S01E01"]={"Name":"Ed Touchables / Nagged to Ed"}
nameDict["Ed.Edd.n.Eddy.S01E02"]={"Name":"Pop Goes the Ed / Over Your Ed"}
nameDict["Ed.Edd.n.Eddy.S01E03"]={"Name":"Sir Ed-a-Lot / A Pinch to Grow an Ed"}
nameDict["Ed.Edd.n.Eddy.S01E04"]={"Name":"Dawn of the Eds / Virt-Ed-Go"}
nameDict["Ed.Edd.n.Eddy.S01E05"]={"Name":"Read All About Ed / Quick Shot Ed"}
nameDict["Ed.Edd.n.Eddy.S01E06"]={"Name":"An Ed Too Many / Ed-n-Seek"}
nameDict["Ed.Edd.n.Eddy.S01E07"]={"Name":"Look into My Eds / Tag Yer Ed"}
nameDict["Ed.Edd.n.Eddy.S01E08"]={"Name":"Fool on the Ed / A Boy and His Ed"}
nameDict["Ed.Edd.n.Eddy.S01E09"]={"Name":"It's Way Ed / Laugh Ed Laugh"}
nameDict["Ed.Edd.n.Eddy.S01E10"]={"Name":"A Glass of Warm Ed / Flea-Bitten Ed"}
nameDict["Ed.Edd.n.Eddy.S01E11"]={"Name":"Who, What, Where, Ed! / Keeping Up with the Eds"}
nameDict["Ed.Edd.n.Eddy.S01E12"]={"Name":"Eds-Aggerate / Oath to an Ed"}
nameDict["Ed.Edd.n.Eddy.S01E13"]={"Name":"Button Yer Ed / Avast Ye Eds"}

path = 'C:/Users/badfitz66/Desktop/EdEddnEddy/Episodes'

os.chdir(path)

for filename in os.listdir(path):
    filename_splitext = os.path.splitext(filename)

    newSettings = nameDict[filename_splitext[0]].get("Name")
    if  newSettings is not None :
        if nameDict.get(filename_splitext[0]):
            os.rename(filename, filename + str(newSettings)+'.mkv')

我正在尝试将作为第一个值的剧集名称(例如:Ed.Edd.n.Eddy.S01E04)更改为剧集编号和季节 + 每个部分的名称(例如:阅读所有关于 Ed /快速拍摄)

但是当我运行时,我得到了这个错误:

Traceback (most recent call last):
  File "C:/Users/badfitz66/Desktop/ah.py", line 33, in <module>
    os.rename(filename, filename + str(newSettings)+'.mkv')
FileNotFoundError: [WinError 3] The system cannot find the path specified: 'Ed.Edd.n.Eddy.S01E02.mkv' -> 'Ed.Edd.n.Eddy.S01E02.mkvPop Goes the Ed / Over Your Ed.mkv'

我做错了什么?

【问题讨论】:

  • filename_splitext[0]episode["Name"] 打印什么?
  • 这只是一个调试打印,以检查名称是否有任何差异。他们只是打印了剧集名称(例如:Ed.Edd.n.Eddy.S01E1)
  • @ZeDucktor 我没有清楚地理解输出!。假设剧集名称是 Ed.Edd.n.Eddy.S01E01,那么episode number and season + name 是什么意思。你想创建目录Ed.Edd.n.Eddy,在那个01里面的目录并将文件移动到那里吗?
  • 这些是imgur.com/a/UpWDX 我正在尝试重命名的文件。我正在尝试将“名称”值添加到它们的末尾,并且我正在使用剧集名称来确保我正确地重命名它们
  • 你能告诉我Ed.Edd.n.Eddy.S01E02的新名字应该是什么

标签: python json file


【解决方案1】:

在你的 for 循环中,episode 是一个字符串,而不是一个字典。所以你不能使用字符串索引访问它的元素。 只需将episode['Name'] 替换为episode,它就会重命名我的所有文件。

您只能使用 1 个循环来完成任务

import os
import sys

nameDict={}

nameDict["test.1"]={"Name":"LOL1.mkv"}
nameDict["test.2"]={"Name":"LOL2.vcl"}
nameDict["test.3"]={"Name":"LOL3.txt"}
nameDict["test.4"]={"Name":"LOL4.py"}
nameDict["test.5"]={"Name":"LOL5.ss"}
nameDict["test.6"]={"Name":"LOL6.lol"}
nameDict["test.7"]={"Name":"LOL7.po"}

path = 'test'

# Loop over all files and directories
for filename in os.listdir(path):
    # Get the name
    filename_splitext = os.path.splitext(filename)
    # print filename_splitext

    # Check if we have new file name in nameDict
    newSettings = nameDict.get( str(filename_splitext[0]), None) 
    if  newSettings is not None :
        # print newSettings
        # Rename with new filename
        os.rename(os.path.join(path, filename),os.path.join(path, newSettings['Name']))

【讨论】:

  • 我已经编辑了我的 OP 以显示一个新问题(但前提相同),如果你能看一下并帮助我修复新的错误,那就太好了!
【解决方案2】:

在黑暗中拍摄:

尝试episode.Name 而不是episode["Name"]

【讨论】:

    猜你喜欢
    • 2017-06-06
    • 1970-01-01
    • 2022-06-27
    • 2021-02-03
    • 2017-11-13
    • 1970-01-01
    • 1970-01-01
    • 2020-03-31
    • 1970-01-01
    相关资源
    最近更新 更多