簡體   English   中英

使用子文件夾名稱重命名文件

[英]Rename files using sub folder names

我的文件夾結構如下

Folder A(Parent folder)

  Folder B(Sub folder)

   1.jpg
   2.jpg
   3.jpg
   4.jpg

  Folder B1(Sub folder)

   1.jpg
   2.jpg
   3.jpg
   4.jpg

  .....

  Folder Bn(Sub folder)

   1.jpg
   2.jpg
   ...jpg

如何使用子文件夾名稱重命名.jpeg文件名,例如B-1.jpg,B-2.jpg ....和B1-1.jpg,B1-2.jpg ...和Bn-1.jpg ,Bn-2.jpg ....

到目前為止,我的代碼(我從這個問題中獲取了代碼:

import os
path = os.getcwd()
# get all directories
folders = ([name for name in os.listdir(path)
        if os.path.isdir(os.path.join(path, name))])
for folder in folders:
  for fname in os.listdir(os.path.join(path,folder)):
    new_fname = os.path.basename(os.path.join(path,folder)) + fname.split('.') **# I think error is in here**
    os.rename(os.path.join(path, fname), os.path.join(path, new_fname))

當我運行代碼時,它只顯示:

Traceback (most recent call last):
  File "<stdin>", line 3, in <module>
TypeError: cannot concatenate 'str' and 'list' objects

我是python的新手,請幫助並使其完整和完美。

完成穩固的答案后,可以使用os.walk和os.path。

ROOT_DIR=os.getcwd()
for root, dirs, files in os.path.walk(ROOT_DIR):
    dname = os.path.split(root)[-1]
    for file in files:
        os.rename(os.path.join(root, file), 
                  os.path.join(root, "{}-{}".format(dname, file))

無論如何,代碼上的真正問題是在此處“分割”,輸出一個list ,並且您無法將一個列表連接到一個字符串。

根據您的問題示例,您需要這樣做:

new_fname = os.path.basename(os.path.join(path,folder)) + fname

采取os.walk('pathToRootDir') ,以遞歸方式獲取子文件夾。

在下一步中,嘗試使用打印語句進行調試,例如

print fname.split('.')

您將自己發現錯誤,也許可以更深入地了解split函數並嘗試執行以下操作:

print fname.split('.')[0]

暫無
暫無

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

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