亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 Python 重命名具有文件名的目錄

使用 Python 重命名具有文件名的目錄

慕娘9325324 2022-08-16 10:28:47
我正在嘗試用其中第一個文件的名稱重命名幾個目錄。我正在嘗試:列出文件夾中的文件。標識目錄。對于每個目錄,訪問它,獲取其中第一個文件的名稱,然后使用該名稱重命名該目錄。這是我到目前為止所得到的,但它不起作用。我知道代碼是錯誤的,但在修復代碼之前,我想知道邏輯是否正確。任何人都可以幫忙嗎?import osfor (root, dirs, files) in os.walk('.'):    print(f'Found directory: {dirpath}')    dirlist = []    for d_idx, d in enumerate(dirlist):        print(d)    filelist = []    for f_idex, f in enumerate(filelist):        files.append(f)[1]         print(f)    os.rename(d, f)
查看完整描述

1 回答

?
繁星coding

TA貢獻1797條經驗 獲得超4個贊

您的代碼中存在一些問題:

  1. 您正在重命名目錄,同時使用 進行迭代。這不是一個好主意,給你一個生成器,這意味著它會在你迭代元素時創建元素,所以重命名循環中的東西會混淆它。os.walkos.walk

  2. 兩者都迭代之前行中聲明為空列表的變量,因此這些循環不執行任何操作。此外,在第二個中,將追加到列表中,但最后的意思是“獲取函數返回的值的第二個元素(請記住Python索引從0開始)” - 但不返回任何內容(它修改列表,不返回新列表),因此將失?。ú⑶夷鸁o論如何都不會使用讀取的值, 所以它不會做任何事情)。for d_idx, d in enumerate(dirlist):for f_idex, f in enumerate(filelist):files.append(f)ffiles[1]appendappend[1]

  3. 首先,由于之前的循環永遠不會運行,并且不會有值,但是,假設兩者都來自 和 ,它們將被指定為相對于其父級的路徑,而不是相對于當前目錄(),因此重命名將失敗。os.rename(d, f)dfdfdirsfiles.

此代碼應按預期工作:

import os


# List of paths to rename

renames = []

# Walk current dir

for (root, dirs, files) in os.walk('.'):

    # Skip this dir (cannot rename current directory)

    if root == '.': continue

    # Add renaming to list

    renames.append((root, files[0]))

# Iterate renaming list in reverse order so deepest dirs are renamed first

for root, new_name in reversed(renames):

    # Make new full dir name (relative to current directory)

    new_full_name = os.path.join(os.path.dirname(root), new_name)

    # Rename

    os.rename(root, new_full_name)


查看完整回答
反對 回復 2022-08-16
  • 1 回答
  • 0 關注
  • 105 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號