很多时候,我们在一些正射影像(DOM)项目生产中产生的坐标文件(tfw),由于使用的软件不同,对于坐标的像素起点不同,因此会造成坐标文件中的X、Y坐标带有小数(如inpho),而往往有些甲方则要求坐标为整数。如果个别文件还好办,可以用记事本手动打开修改,但是对于分幅数据,成千上万的文件,手动修改就工作量太大了。因此可以使用下面的代码进行批量修改。

本人并不懂Python编程,只是在网上查阅了一些资料,免强能实现我要的功能就可以了,比起手动修改省了不少时间。本人小白一枚,大神勿喷!

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date    : 2019-12-16 02:19:58
# @Author  : 仁者无敌

import os,shutil;
from Tkinter import *
import Tkinter, tkFileDialog
root = Tk()
root.withdraw()
dir = tkFileDialog.askdirectory()
path = dir + '/'
#root.mainloop()
root.quit()
def reset():
    i = 0
    j = 0
    filelist = os.listdir(path)  # 该文件夹下所有的文件(包括文件夹)
    for files in filelist:  # 遍历所有文件
        i = i + 1
        Olddir = os.path.join(path, files);  # 原来的文件路径
        if os.path.isdir(Olddir):  # 如果是文件夹则跳过
            continue;
        filename = os.path.splitext(files)[0];  # 文件名
        filetype = os.path.splitext(files)[1];  # 文件扩展名
        filePath = path+filename+filetype
        if filetype == '.tfw':
            shutil.copyfile(filePath,(path + filename + '.bak')) # 备份原文件
            print ('Processing ' + filename + filetype + '......')
            changetext(filePath)
            j = j + 1
    if dir:
        print (str(j) + ' Finished.')
    else:
        print ('No directory selected !')
 #       alter(filePath, "/art/", "../art/")

def changetext(name):
 with open(name,'r') as f:
  lines=[] # 创建了一个空列表,里面没有元素
  for line in f.readlines():
   if line!='\n':
    lines.append(line)
  f.close()
  line4 = str(round(float(lines[4].replace('\n','')))) + '\n'
  line5 = str(round(float(lines[5].replace('\n','')))) + '\n'
  lines[4] = line4
  lines[5] = line5
 with open(name,'w') as f:
  for line in lines:
    f.write(line)
reset()