python-3.x 用groundtruth.txt文件重命名文件夹中的图像[已关闭]

fumotvh3  于 2023-04-08  发布在  Python
关注(0)|答案(1)|浏览(99)

已关闭,该问题需要details or clarity,目前不接受回答。
**想要改进此问题?**通过editing this post添加详细信息并澄清问题。

6个月前关闭。
Improve this question
我有一个images文件夹,在images文件夹中,它包含150个文件夹,每个文件夹包含10,000张图像。单个gt.txtimages文件夹之外,包含所有图像的名称和真实值。
gt.txt的结构类似于images/0/0.jpg 참자녀사무실
我想重命名所有图像与模式一样gt_image_name.jpg참자녀사무실_0.jpg .然而,我无法做到这一点,我写了一个简单的代码,但我认为glob库不工作的文件夹.

编码

mapping = {}
f = open('/media/cvpr/CM_22/synthtiger/results/gt.txt', 'r')

for line in f.readlines():
    k, v = line.split()
    path, old_name = k.rsplit('/', 1)
    new_name = "{}/{}_{}".format(path, v, old_name)
    mapping[k] = v

base_path = '/media/cvpr/CM_22/synthtiger/results/'
for old, new in mapping.items():
    old_path = os.path.join(base_path, old)
    new_path = os.path.join(base_path, new)
    os.rename(old_path, new_path)

输出错误

3vpjnl9f

3vpjnl9f1#

我想你可以这样做:
1.读取gt.txt,读取文件,使用split得到原始名称raw_name和部分真实的名称img_name;
1.使用{}_{}.format(img_name, raw_name)创建新的文件名;
1.使用一个for循环来重命名所有的图像,你可以使用os.rename来做这件事。
更新:我的经验是,不使用任何循环超过两层

mapping = {}
f = open('/media/cvpr/CM_22/synthtiger/results/gt.txt', 'r'):
for line in f.readlines():
    k, v = line.split(' ')
    path, old_name = k.rsplit('/', 1)
    new_name = "{}/{}_{}".format(path, v, old_name)
    mapping[k] = v
base_path = '/media/cvpr/CM_22/synthtiger/results/images/'
for old, new in mapping.items():
    old_path = os.path.join(base_path, old)
    new_path = os.path.join(base_path, new)
    os.rename(old_path, new_path)

现在,你有一个dict保存像{"images/0/0.jpg": "images/0/참자녀사무실_0.jpg"}在那之后,使用另一个for循环来重命名所有文件
注:多圈是一个不好的编程习惯,因为它很难调试,也很难阅读,容易出错,最后没有人理解你的代码,包括你自己。使用这样的循环,不需要列出所有文件,只需使用Map来重命名文件名

相关问题