晒猫的太阳 2021-09-13 11:13 采纳率: 66.7%
浏览 98
已结题

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("转换完成!")

#望解答

  • 写回答

2条回答 默认 最新

  • 程序媛一枚~ Python领域新星创作者 2021-09-13 14:04
    关注

    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)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月15日
  • 已采纳回答 9月13日
  • 修改了问题 9月13日
  • 创建了问题 9月13日

悬赏问题

  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法