如何在R中批量重命名子文件夹内的分州Shapefile
批量重命名州级Shapefile文件脚本方案
嘿,我太懂这种“理论上简单实操却卡壳”的滋味了!别慌,咱用个简单的Python脚本就能一次性搞定所有Shapefile的重命名,把那些乱码文件名换成对应的州名,完美匹配你的文件夹结构。
先确认你的文件夹结构
假设你的文件组织是这样的(跟你描述的一致):
places/ ├── Iowa/ │ ├── gz_2010_53_160_00_500k.shp │ ├── gz_2010_53_160_00_500k.shx │ ├── gz_2010_53_160_00_500k.dbf │ └── gz_2010_53_160_00_500k.prj ├── Kansas/ │ ├── ...(类似乱码命名的Shapefile文件) └── ...(其他5个州的文件夹)
直接用这个Python脚本搞定
import os # 替换成你的"places"文件夹实际路径,Windows路径用双反斜杠或原始字符串(比如r"C:\xxx\places") root_dir = "./places" # 遍历每个州的子文件夹 for state_folder in os.listdir(root_dir): state_path = os.path.join(root_dir, state_folder) # 跳过非文件夹的项目 if not os.path.isdir(state_path): continue # 取文件夹名作为州名(就是我们要用来重命名的前缀) state_name = state_folder # 遍历子文件夹里的所有文件 for filename in os.listdir(state_path): file_path = os.path.join(state_path, filename) # 跳过嵌套的子文件夹 if os.path.isdir(file_path): continue # 拆分文件名和后缀 _, ext = os.path.splitext(filename) # 只处理Shapefile相关的后缀,你可以根据自己的文件情况增减 valid_shp_extensions = ['.shp', '.shx', '.dbf', '.prj', '.sbn', '.sbx', '.cpg', '.shp.xml'] if ext.lower() not in valid_shp_extensions: continue # 生成新文件名:州名+原后缀 new_filename = f"{state_name}{ext}" new_file_path = os.path.join(state_path, new_filename) # 执行重命名 os.rename(file_path, new_file_path) print(f"已完成重命名:{filename} → {new_filename}") print("所有Shapefile文件重命名操作完成!")
几个重要的注意事项
- 先备份! 运行脚本前一定要把整个
places文件夹复制一份备份,避免脚本出错导致文件丢失 - 确保每个州的子文件夹里只有一套Shapefile文件,如果有多个同后缀的文件(比如两个.shp),重命名会直接覆盖,提前检查清楚
- 如果你的文件夹里还有其他无关文件,脚本会自动跳过,因为我们只指定了Shapefile相关的后缀
内容的提问来源于stack exchange,提问作者winitheju
相关产品推荐
相关产品推荐

