無論檔案擴展名是什么,我都希望該檔案的名稱與其父檔案夾完全相同,即在考慮檔案夾 2023-10-18 時,我希望將檔案放在2023-10-18內而不是掩星。 ...
我嘗試使用此執行緒重命名多個檔案:

uj5u.com熱心網友回復:
您需要將其保存到檔案(例如,rename.py)并使用帶有附加引數的 python 解釋器呼叫它 - 您要為其重命名其子目錄中檔案的父目錄的名稱。例如:“python rename.py parent_dir”。目錄名稱可以是絕對的或相對的。作為附加引數,您還可以在重命名檔案時指定用于保存擴展名的鍵(0 - 不保存,1 - 保存)。默認情況下不保存擴展名。這是一個保存擴展的示例:“python rename.py parent_dir 1”。
rename.py 中的腳本:
import os
import sys
def rename_first_file_in_dir(dir_path, new_file_name, keep_extension = False):
for current_file_name in os.listdir(dir_path):
current_file_path = os.path.join(dir_path, current_file_name) # full or relative path to the file in dir
if not os.path.isfile(current_file_path):
break
# rename only base name of file to the name of directory
if keep_extension:
file_extension = os.path.splitext(current_file_name)[1]
if len(file_extension) > 0:
new_file_name = new_file_name file_extension
new_file_path = os.path.join(dir_path, new_file_name)
print("File " current_file_name " renamed to " new_file_name " in " os.path.basename(dir_path) " directory");
os.rename(current_file_path, new_file_path)
# exit after first processed file
break
if len(sys.argv) < 2:
print("Usage: python " os.path.basename(__file__) " <directory> [keep_files_extensions]") # help for usage
exit(0)
scan_dir = sys.argv[1]
keep_extension = False if len(sys.argv) < 3 else not (int(sys.argv[2]) == 0) # optional parameter 0 - False, 1 - True, by default - False
if not os.path.exists(scan_dir):
print("Error: directory " scan_dir " does not exists")
exit(-1)
if not os.path.isdir(scan_dir):
print("Error: file " scan_dir " is not a directory")
exit(-1)
print("Scanning directory " scan_dir)
for file_name in os.listdir(scan_dir): # walk through directory
file_path = os.path.join(scan_dir, file_name)
if os.path.isdir(file_path):
rename_first_file_in_dir(file_path, file_name, keep_extension)
uj5u.com熱心網友回復:
這里是使用 pathlib 模塊的示例代碼。請務必修改 base_folder。
"""
rename_filename.py
Rename filename inside the folders.
https://stackoverflow.com/questions/71408697/changing-name-of-the-file-to-parent-folder-name
Example:
base_folder
F:/Tmp/s13/
sub_folders
F:/Tmp/s13/2022-05-01
F:/Tmp/s13/2022-08-01
files under subfolder
F:/Tmp/s13/2022-05-01/aa.txt
F:/Tmp/s13/2022-08-01/bb.txt
Usage:
Be sure to modify first the "base_folder" value in the main()
command lines:
python rename_filename.py or
python3 rename_filename.py
"""
from pathlib import Path # python version >= 3.4
def rename_file(base_folder):
"""
Rename the filename of the file under the sub-folders of the base_folder.
"""
base_path = Path(base_folder).glob('*/*')
# Get the file path in every sub-folder.
for file in base_path:
# print(file)
sub_folder_abs_path = file.parent # sub-folder path, F:/Tmp/s13/2022-05-01
sub_folder_name = file.parent.name # sub-folder name, 2022-05-01
# Rename the file to sub-folder name.
new_file = Path(sub_folder_abs_path, sub_folder_name)
file.rename(new_file)
def main():
# Change the base folder according to your case.
base_folder = 'F:/Tmp/s13/'
rename_file(base_folder)
if __name__ == '__main__':
main()
uj5u.com熱心網友回復:
因此,根據我的理解,每個檔案夾中都有一個檔案。您想用相同的檔案夾名稱重命名檔案并保留擴展名。
import os
# Passing the path to your parent folders
path = r'D:\bat4'
# Getting a list of folders with date names
folders = os.listdir(path)
for folder in folders:
files = os.listdir(r'{}\{}'.format(path, folder))
# Accessing files inside each folder
for file in files:
# Getting the file extension
extension_pos = file.rfind(".")
extension = file[extension_pos:]
# Renaming your file
os.rename(r'{}\{}\{}'.format(path, folder, file),
r'{}\{}\{}{}'.format(path, folder, folder, extension))
我已經在我自己的檔案上進行了如下嘗試:


這是輸出的示例:

我希望我明白你的意思。:)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/442943.html
標籤:Python python-3.x 文件 目录
下一篇:內連接兩個表并列出特定行
