python实现csv格式文件转为asc格式文件的方法
作者:随风而醒 发布时间:2021-10-12 19:10:37
标签:python,asc,csv
一、背景描述
csv格式文件是一种类似于excel的文件格式
asc格式文件是一种可以用text打开的文本文件
csv转asc本来可以用arcgis顺利完成,但由于csv数据量太大(744万行),arcgis处理不了如此大的文本,所以需要通过写代码实现(注:不是用python调用arcgis工具)
二、格式说明
Csv格式:
asc图片
说明:第一列为id,第二列是值,第三第四列为值所在的行列号;csv的数据共744万行,直接打开无法全部加载
asc格式:
三、举例
需要的是将csv对应的某行某列的值prevalue,写成asc格式的文件,检验是否成功转换的方式:将转成的asc文件加载到arcmap中进行查看,如上面的aspect.asc在arcmap中是下图所示:
四、附件说明
附件中给出是一个用作示例的csv,以及上文提到的aspect.asc,用作参考
其实这个小程序的要求简单来说就是把csv数据逐行读取,然后对应地写成asc格式的文件,关键在于对asc文件格式的理解,希望在看了上述说明后,确定了解asc格式后再进行下一步的操作。
注:在arcmap中,csv转asc是这样实现的:通过创建xy事件图层,将csv转shp(此时的csv中prevalue后面是xy坐标,这里我已经将坐标转为行列号row、col了),随后通过要素转栅格工具,将shp转为栅格,最后用栅格转asc工具,将得到最终需要的asc
五、实现方式:
这里是按行依次读取,所以需要通过excel操作将row所在列按顺序依次排列
'''
Created on 2017-3-21
@author: soundslow
'''
#coding=utf-8
#python默认使用ASKII码保存文件,所以在文件开头需要声明保存编码的格式(例:#coding=utf-8)
import sys
from sys import argv
import csv
argc = '1.asc'
script ,filename = argc,argv
fw = open(argc, 'w')
# string为:从ncols到NODATA_value这几行是一样的,因为数据源是一致的
string = ("ncols 4800\nnrows 1550\nxllcorner 284687.500000\nyllcorner 2412912.500000\ncellsize 25.000000\nNODATA_value -9999.000000\n")
fw.write(string)
fr = open(argc, 'r')
with open('result_50_1.csv') as f:
reader = csv.reader(f)
'''
第一个for循环是为了提取出一个中间介质row_num作为行数的表示,
由于从表格中提取的数据(行号)并不是数字类型,
不能直接使用(1 == f_rows[2]进行判断,所以直接使用自身的类型。)
(补充:应该是字符串类型)
'''
for i,f_rows_temp in enumerate(reader):
if(i == 0):
continue
row_num = f_rows_temp[2]
print(row_num)
break
#遍历写入数据,遍历行数(即csv文件第三列f_rows[2])
for i,f_rows in enumerate(reader):
if(i == 0):
continue
if(f_rows[2] != row_num): # 判断是否换行
fw.write('\n')
row_num = f_rows[2]
fw.write(f_rows[1])
fw.write(' ')
sys.stdout.flush() #强制IO刷新,写入文件数据
print(f_rows[1]) #两个打印是为了便于观察数据运行情况
print(f_rows)
fw.close()
fr.close()
题解下载链接
来源:https://blog.csdn.net/SoundSlow/article/details/64533944


猜你喜欢
- 本文实例讲述了Python视频爬虫实现下载头条视频功能。分享给大家供大家参考,具体如下:一、需求分析抓取头条短视频思路:分析网页源码,查找解
- 本代码是利用java反射,读取数据库表自动根据表名生成实体类,数据库采用老牌SQLSERVER 2000,驱动为JTDS,其他数据库可根据情
- 连接服务器菜单栏找到【工具/Tools】->【Deployment/部署】->【Confinguration…/配置…】。点加号
- 矩阵相乘需要前面矩阵的行数与后面矩阵的列数相同方可相乘。第一步,先将前面矩阵的每一行分别与后面矩阵的列相乘,作为结果矩阵的行列;第二步算出结
- opts, args = getopt.getopt(sys.argv[1:], "t:s:h", ["wal
- 本文实例讲述了Python实现的本地文件搜索功能。分享给大家供大家参考,具体如下:偶尔需要搜索指定文件,不想每次都在windows下面去搜索
- 英文文档:vars([object])Return the __dict__ attribute for a module, class,
- python版本要求在3.3.x,需要mysql connector for python第三方库支持不适用所有的zencart导入到mag
- 通过一条命令用Npm安装gulp-htmlmin:npm install gulp-htmlmin --save-dev安装完毕后,打开gu
- 如何在数据库中限制检索行数?为了照顾显示器屏幕的大小,使检索结果更整齐明了一些,请问,可以控制数据库的检索行数吗? &
- CREATE PROCEDURE [dbo].[up_Pager] @table varchar(2000), --表名 @col varc
- 使用Requests测试带签名的接口部分业务为了安全需要,需要对接口请求数据做签名校验,一般制定一下规则1、业务方接入系统,需申请业务ID以
- 本文实例讲述了JavaScript获取中英文混合字符串长度的方法。分享给大家供大家参考,具体如下:JavaScript获取中英文混合字符串的
- 初级的图像拼接为将两幅图像简单的粘贴在一起,仅仅是图像几何空间的转移与合成,与图像内容无关。高级图像拼接也叫作基于特征匹配的图像拼接,拼接时
- 叨逼叨首先,介绍一下 pdb 调试,pdb 是 python 的一个内置模块,用于命令行来调试 Python 代码。或许你会说,现在用 Py
- 在ASP输出页面只是调出数据库里内容展现给用户看没有使用SESSION等动态属性,是可以CACHE的,以加快访问速度具体操作方法如下:在as
- 前面我们给了Tkinter接管Python输入和输出的介绍,我们不难可以想到,能用Tkinter来开发自己的Python代码编辑器.例如可以
- EasyUI 简介easyui是一种基于jQuery的用户界面插件集合。easyui为创建现代化,互动,JavaScript应用程序,提供必
- 如下所示:var table_name = table.render({});page_size = table_name.config.l
- 每种编程语言都会有一些特殊的单词,称为关键词。对待关键词的基本要求是,你在命名的时候要避免与之重复。本文将介绍一下Python中的关键词。关