Python:读取一个.txt文件,并在带有.txt索引的目录中更改文件名

2admgd59  于 2023-03-09  发布在  Python
关注(0)|答案(2)|浏览(162)

我有一个目录,其中包含大量的图像,同时,我有一个.txt文件,其中包含的名称,如下面的格式。我想改变名称的图像基于文本文件的标题。有100个名称和100个图像在一个文件夹中。

在文本文件中

Flower Blue
Flower Red
Flower Black
Flower orange

在文件夹内

001.mp4
002.mp4
003.mp4
004.mp4

代码以下代码不更改名称

import os
import shutil

dirpath = "/media/cvpr/CM_22/inst_you/vidoes"

for file in os.listdir(dirpath):
    with open('/media/cvpr/CM_22/inst_you/vidoes_name') as f:
        lines = [line.rstrip('\n') for line in f]
        print(file)
        newfile = os.path.join(dirpath, file.split("_", 1)[1])
        print(newfile)
        os.rename(os.path.join(dirpath, file), newfile)
64jmpszr

64jmpszr1#

假设input.txt包含新的文件名,并且它们是对应文件001.mp4、002.mp4等的名称,那么使用Python中已经提供的pathlib模块会更简单:

from pathlib import Path

with open('input.txt') as names:
    # Read and number lines starting from 1.
    for i, line in enumerate(names, 1):
        # Generate original filename (001.mp4, 002.mp4, etc.)
        p = Path(f'{i:03d}.mp4')
        # .with_stem() replaces the base name of file
        p.rename(p.with_stem(line.strip()))
vmdwslir

vmdwslir2#

我认为你应该把for放在with里面,并且每次使用***zip***生成一个新文件名和一个旧文件名。它应该是这样的:

with open('/media/cvpr/CM_22/inst_you/vidoes_name') as f:  
        lines = [line.rstrip('\n') for line in f]
        for old_filename, new_filename in zip(os.listdir(dirpath), lines):
            print(old_filename)
            print(new_filename)
            newfile = os.path.join(dirpath, new_filename.split("_", 1)[1])
            print(newfile)
            os.rename(os.path.join(dirpath, old_filename), newfile)

相关问题