我有一堆LAS文件已经提供了不同的命名约定。我想将文件重命名为具有相同的统一命名 - 基于每个tile质心的东坐标和北坐标。我已经生成了一个包含旧名称和新名称的文本文件,并且我正在尝试拼凑一个python脚本 - 但是我遇到了这个错误
回溯(最近一次调用最后一次):文件" C:\ LASTools \ Test \ ReName_Files.py",第64行,in newName = newList [indexOldName] NameError:name' indexOldName&#39 ;未定义
这里的脚本......我是python的新手,所以这可能需要我几个小时的研究和反复试验(它已经有了)......
import os
folder = "C:\Test\"
lookupTable = open(folder + "LookupTable.txt")
tableList = lookupTable.readlines() lookupTable.close()
old = "TIFF" new = "TILE"
newTable = [] for line in tableList: newLine = line.strip()
newerLine = newLine.strip(",")
newestLine = newerLine.strip("'")
almostFinalLine = newestLine.replace('"',"")
finalLine = almostFinalLine.split(",") newTable.append(finalLine)
header = newTable[0]
indexOld = header.index(old) - 1
indexNew = header.index(new) - 1
oldList = []
newList = []
for item in newTable:
if item != newTable[0]:
valueOld = item[indexOld]
valueNew = item[indexNew]
oldList.append(valueOld)
newList.append(valueNew)
for file in os.listdir(folder):
nameAndExt = os.path.splitext(file)
oldName = nameAndExt[0]
extension = nameAndExt[1]
if oldName in oldList:
indexOldName = oldList.index(oldName)
newName = newList[indexOldName]
os.rename(folder + oldName + extension, folder + newName + extension)
答案 0 :(得分:1)
除了您的代码没有正确格式化和缩进之外,解释器在行
处挣扎newName = newList[indexOldName]
变量indexOldName
仅在事先oldName in oldList
为真时定义。否则,它未被分配,您无法使用它来索引newList
。
因此,如果newName
中没有oldName
,那么可能只知道oldList
应该是什么。
修改强>
要使用查找表重命名多个文件,以下方法就足够了:
import os
with open('lookup.txt') as f:
table = f.read().strip().split('\n')
for line in table:
names = line.split()
os.rename(names[0], names[1])
说明:
with open(...) as
模式。这可确保在离开此范围后关闭文件。read()
。strip()
会删除尾随换行符(如果有)。split
为单行。for
循环遍历所有行。split
分为两部分。请注意,默认情况下split
将字符串拆分为空格。如果您的文件名包含空格,则需要稍微修改此方法。rename
旧文件names[0]
到names[1]
。