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
0
投稿
猜你喜欢
- ASP获取远程文件的通过header头信息,并返回远程文件大小信息,远程文件可以是网页或RAR,EXE任何格式的文件。以下是具体代码:<
- 问题背景a=[1,4,2,1,5,6,9,0]#删除列表中的元素,其所在的位置为[1,3,7]del_index=[1,3,7]tmp=[i
- 1.安装pymysql进入cmd,输入 pip install pymysql: 2.数据库建表在数据库中,建立一个简单的表,如图: 3.简
- 加号+, 是字符串优先.并且从左向右计算. 就是运算前后两个值,只要有一个是字符串,就会将其中一个非字符串的试图转换成字符串.
- 生生把写过的java版改成javascript版,第一次写,很不专业,见谅。唉,我是有多闲。var Sudoku = { &nbs
- 现在我们已经很熟悉Django的MTV模式了。模板(template)负责如何去展示数据,而视图(view)负责筛选出正确的数据。因此通常来
- 概要:本文主要描述XHTML中相对定位和绝对定位各自的本质、用法、区别和两者之间的关系。以及使用CSS的Left、Right、Top、Bot
- 数据库文件在使用过程中,日志文件会越来越大。小则几个G,大的可能几十上百G都有可能,有时实在是没有必要为它浪费太大的硬盘存储空间。所以可以把
- <?php interface js{ function ys($a,$b); } class Af implements js{ f
- MaxDB和MySQL是独立的数据库管理服务器。系统间的协同性是可能的,通过相应的方式,系统能够彼此交换数据。要想在MaxDB和MySQL之
- 如下所示:两个函数:Basemap.drawparallels ##纬度 Basemap.drawmeridia
- 这里我不想采用诸如ubuntu下的apt-get install方式进行python的安装,而是在linux下采用源码包的方式进行pytho
- 根据google最新的算法规则:用户行为模式的重视程度越来越高,这也就要求网页设计的时候应注意“合理的网页结构”,SEO业界也有个共识“网页
- 如何用OdbcRegTool组件来创建一个数据源?OdbcRegTool是一个免费组件,在服务器上安装后,就可以来创建一个数据源:<h
- 在了解了JavaScript1.7的相关更新后,我们再继续关注JavaScript1.8的新特性。在W3C Group带来的JavaScri
- 导语幼儿园升小学,小学升中学,中学升高中..........每个人都要经历的九年义务教育:伴随的都是作业、随堂考、以及每个科目的大大小小的考
- 如何同时处理数据库和页面错误? If Err.Number = 0 And ob
- 一、使用loadVariables 一个例子简单的描述了如何通过GET方法向服务器端的ASP发送请求: _root. pushAc
- 队列和优先队列(Priority Queue)队列是一种可以完成插入和删除的数据结构。普通队列是先进先出(FIFO), 即先插入的先被删除。
- 一、简介主流被使用的地理坐标系并不统一,常用的有WGS84、GCJ02(火星坐标系)、BD09(百度坐标系)以及百度地图中保存矢量信息的we