python 批量转换处理TXT文档内容

img

1.第一步是通过软件 对图片 进行初步处理 标注关键点坐标 得到的就是对应的txt文件;
2.但是是大量的 这个初步txt文件里面的内容是关于图片的相对坐标;
3.需要进一步处理转换 就是所需求的转换;
4.转换用到的数值 就是图片属性的尺寸大小 即宽度与高度 ;(有不同的图片来源,此处转换数值可以进行自定义);
5.用相对坐标去乘以图片的宽、高 得到的数值结果取整数,最后再转换txt文件格式为.pts格式就是最终要求。


import os


def trans(root_dir):
    for f in os.listdir(root_dir):
        if f.endswith(".txt"):
            f_name = os.path.splitext(f)[0]
            f_path = os.path.join(root_dir, f)
            pts_f = os.path.join(root_dir, f"{f_name}.pts")
            print(f"Trans {f} to {os.path.basename(pts_f)}")
            with open(f_path, "r") as rf, open(pts_f, "w")as wf:
                lines = [x.strip() for x in rf.readlines()[1:]]
                print(lines)
                multis = [1262, 948]  # 请设置转换图片宽、高数值
                # lines = [[x.split(".")[-1][:3] for x in y.split(' ')] for y in lines]
                lines = [[str(multi * int(x.split(".")[-1][:3])) for multi, x in zip(multis, y.split(' '))] for y in
                         lines]
                print(lines)
                #  lines = [[x.split('.')[-1][:3] for x in y.split(' ')] for y in lines]
                for line in lines:
                    wf.write(' '.join(line) + '\n')
    print("Done!")


if __name__ == '__main__':
    # trans("txt所在的文件夹")
    trans(r"H:\study\test")

print("转换完成!")

#望解答

img

import os
import math


def trans(root_dir, height):
    for f in os.listdir(root_dir):
        if f.endswith(".txt"):
            f_name = os.path.splitext(f)[0]
            f_path = os.path.join(root_dir, f)
            pts_f = os.path.join(root_dir, f"{f_name}.pts")
            print(f"Trans {f} to {os.path.basename(pts_f)}")
            with open(f_path, "r") as rf, open(pts_f, "w")as wf:
                lines = [x.strip() for x in rf.readlines()[1:]]
                print(lines)
                multis = [1262, height]
                number = [[str(float(x)) for multi, x in zip(multis, y.split(' '))] for y in lines]
                number1 = [[str(multi * float(x)) for multi, x in zip(multis, y.split(' '))] for y in lines]
                print(number)
                print(number1)
                # int 向上取整
                int_floor = [[str(math.floor(multi * float(x))) for multi, x in zip(multis, y.split(' '))] for y in
                             lines]
                print('int 向上取整:', int_floor)
                # int 向下取整
                lines_ceil = [[str(math.ceil(multi * float(x))) for multi, x in zip(multis, y.split(' '))] for y in
                              lines]
                print('int 向下取整:', lines_ceil)

                # 结果写入.pts文件
                for line in lines_ceil:
                    line = str(line).replace("[", '').replace(']', '').replace('\'', '').replace(",", ' ') + '\n'
                    wf.write(line)

            # 去掉文件末尾多余的空行
            with open(pts_f, "r") as f:  # 打开文件
                strs = str(f.read())  # 读取文件
            strs = strs.rstrip("\n")
            with open(pts_f, "w") as f2:  # 写入新文件
                f2.write(strs)


if __name__ == '__main__':
    height = 948
    trans(r"txts/", height)

你这不是把任务分解的挺好,代码也写了一部分,你是卡在哪里了呢,还是单纯的并不想付出任何努力只想要完整代码