2017-12-03 209 views
-1

我想用Python來在從包含「目標」名稱的.txt文件名爲myShow目錄中的文件重命名:從文本文件中的目錄替換文件名

realNameForEpisode1 
realNameForEpisode2 
realNameForEpisode3 

層次結構看起來像:

episodetitles.txt 
myShow 
├── ep1.m4v 
├── ep2.m4v 
└── ep3.m4v 

我試過如下:

import os 

with open('episodetitles.txt', 'r') as txt: 
    for dir, subdirs, files in os.walk('myShow'): 
     for f, line in zip(sorted(files), txt): 

      originalName = os.path.abspath(os.path.join(dir, f)) 
      newName = os.path.abspath(os.path.join(dir, line + '.m4v')) 
      os.rename(originalName, newName) 

但我不硝酸鉀w ^爲什麼我在文件名的擴展月底前獲得?

realNameForEpisode1?.m4v 
realNameForEpisode2?.m4v 
realNameForEpisode3?.m4v 
+0

什麼沒有工作?嘗試在代碼中放置一些打印語句,或者使用調試器來查看f,originalName,newName等的值。到達一個你知道的地方(比如將一個文件放在同一個目錄中,並測試你可以重命名它。)這是你應該能夠通過一點點額外的努力來解決你的問題。 – SteveJ

+0

對不起,忘了補充說我已經測試過了,但不明白爲什麼在擴展前出現'?'。是因爲文本文件在每行的末尾有'\ n'嗎? –

回答

0

只需導入「操作系統」,它會工作:

import os 
with open('episodes.txt', 'r') as txt: 
    for dir, subdirs, files in os.walk('myShow'): 
     for f,line in zip(sorted(files), txt): 
      if f == '.DS_Store': 
       continue 
      originalName = os.path.abspath(os.path.join(dir, f)) 
      newName = os.path.abspath(os.path.join(dir, line + '.m4v')) 
      os.rename(originalName, newName) 
+0

對不起,忘了補充說我有 - 編輯了這個問題產生我的不正確的輸出 –

0

我想通了 - 那是因爲英寸txt文件,最後一個字符是一個隱含的\n,所以需要切片文件名,不包括最後一個字符(從而成爲一個?):

import os 


def showTitleFormatter(show, numOfSeasons, ext): 
    for season in range(1, numOfSeasons + 1): 

     seasonFOLDER = f'S{season}' 
     targetnames = f'{show}S{season}.txt' 

     with open(targetnames, 'r') as txt: 
      for dir, subdirs, files in os.walk(seasonFOLDER): 
       for f, line in zip(sorted(files), txt): 

        assert f != '.DS_Store' 

        originalName = os.path.abspath(os.path.join(dir, f)) 
        newName = os.path.abspath(os.path.join(dir, line[:-1] + ext)) 
        os.rename(originalName, newName)