我在项目中用外语命名的图层列表很多。我想翻译英文名称并将其添加到名称中。
当我右键单击图层并选择Properties -> General
并更改图层名称时,它会在图层树中可视化,但原始文件保持不变。
有没有办法从QGIS更改原始文件的名称?
太多了,以至于无法在我的文件夹中全部搜索它们。
我在项目中用外语命名的图层列表很多。我想翻译英文名称并将其添加到名称中。
当我右键单击图层并选择Properties -> General
并更改图层名称时,它会在图层树中可视化,但原始文件保持不变。
有没有办法从QGIS更改原始文件的名称?
太多了,以至于无法在我的文件夹中全部搜索它们。
Answers:
为此,您需要i)从ToC中删除该层,ii)重命名符合Shapefile的文件(即shp,dbf,shx,prj等),并且iii)将重命名的层加载到QGIS。但是我们确实需要自动化这样的工作流程!
如果您查看这些步骤,它们与Table Manager插件的作用类似。因此,我修改了此类插件的代码以重命名Shapefile,您可以从此处下载。
您可以通过这种方式使用它(首先尝试一个小的备份项目以查看其工作原理):
复制下一个代码片段:
from rename_shapes import RenameShapefiles
for lyr in iface.mapCanvas().layers():
rn = RenameShapefiles( iface, lyr )
rn.doSave()
而已!我已经在GNU / Linux,QGIS 2.6上对其进行了测试。运行代码后,ToC中的层顺序会有所不同。
如果您有任何问题,请告诉我。
如果您需要保留图层顺序,请提出一个新问题,也许我可以看看:)。
对于R用户,我编写了一个快速R函数,该函数批量重命名.shp文件和所有关联的文件。它非常裸露,没有错误检查等,因此,如果失败,则需要进行一些调查。
# Function to rename shapefile (.shp) and all associated files
# fpath = full file path of any of the associated files (character)
# newName = new name for the files (character)
renameShp <- function(fpath, newName) {
dir <- dirname(fpath)
base <- basename(fpath)
fname <- strsplit(base, '[.]')[[1]][1]
ls <- list.files(path=dir, pattern=fname, full.names=TRUE)
sapply(ls, FUN=function(p){
file.rename(from=p, to=sub(pattern=fname,replacement=newName, p))
})
print(paste("Renamed", length(ls), "files."))
}
如果您具有用于重命名它们的一致架构,则可以在python脚本中执行此操作。python中的一种方法是os.rename(src,dest)。具体细节将取决于重命名文件的算法。这是为了重命名实际文件,而不仅仅是重命名目录中的图层名称。
否则,我不知道手动重命名的替代方法,因为您必须翻译它们。从理论上讲,您可以在python中构建翻译词典,但是编码所需的时间可能与手动完成的时间一样长。另外,请注意,重命名文件本身会破坏数据源。仅在TOC中重命名图层名称应该可以,但是我对QGIS的了解不如Arc。
我建议使用此程序来重命名文件http://www.bulkrenameutility.co.uk/Main_Intro.php。它是开放的,易于使用。重命名文件后,必须使用文本编辑器打开qgis项目文件(尝试notepad ++)并进行相同的查找和替换。