python实现csv格式文件转为asc格式文件的方法


Posted in Python onMarch 23, 2018

一、背景描述

csv格式文件是一种类似于excel的文件格式

asc格式文件是一种可以用text打开的文本文件

csv转asc本来可以用arcgis顺利完成,但由于csv数据量太大(744万行),arcgis处理不了如此大的文本,所以需要通过写代码实现(注:不是用python调用arcgis工具)

二、格式说明

Csv格式:

python实现csv格式文件转为asc格式文件的方法

asc图片

说明:第一列为id,第二列是值,第三第四列为值所在的行列号;csv的数据共744万行,直接打开无法全部加载

asc格式:

python实现csv格式文件转为asc格式文件的方法

三、举例

需要的是将csv对应的某行某列的值prevalue,写成asc格式的文件,检验是否成功转换的方式:将转成的asc文件加载到arcmap中进行查看,如上面的aspect.asc在arcmap中是下图所示:

python实现csv格式文件转为asc格式文件的方法

四、附件说明

附件中给出是一个用作示例的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()

题解下载链接

以上这篇python实现csv格式文件转为asc格式文件的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现通过pil模块对图片格式进行转换的方法
Mar 24 Python
python如何获取服务器硬件信息
May 11 Python
python密码错误三次锁定(实例讲解)
Nov 14 Python
python 输出上个月的月末日期实例
Apr 11 Python
浅谈python中requests模块导入的问题
May 18 Python
python 用正则表达式筛选文本信息的实例
Jun 05 Python
python实现RabbitMQ的消息队列的示例代码
Nov 08 Python
对python3 Serial 串口助手的接收读取数据方法详解
Jun 12 Python
python爬虫selenium和phantomJs使用方法解析
Aug 08 Python
通过实例学习Python Excel操作
Jan 06 Python
Pyinstaller加密打包应用的示例代码
Jun 11 Python
python 下载文件的几种方法汇总
Jan 06 Python
python字典快速保存于读取的方法
Mar 23 #Python
使用Python爬了4400条淘宝商品数据,竟发现了这些“潜规则”
Mar 23 #Python
python 将字符串转换成字典dict的各种方式总结
Mar 23 #Python
Python自定义线程类简单示例
Mar 23 #Python
python如何实现内容写在图片上
Mar 23 #Python
Python实现的自定义多线程多进程类示例
Mar 23 #Python
python爬取各类文档方法归类汇总
Mar 22 #Python
You might like
PHP得到某段时间区间的时间戳 php定时任务
2012/04/12 PHP
基于PHP Socket配置以及实例的详细介绍
2013/06/13 PHP
PHP图片等比缩放类SimpleImage使用方法和使用实例分享
2014/04/10 PHP
php自定义函数转换html标签示例
2016/09/29 PHP
php常用字符函数实例小结
2016/12/29 PHP
ppk谈JavaScript style属性
2008/10/10 Javascript
js escape,unescape解决中文乱码问题的方法
2010/05/26 Javascript
如何设置一定时间内只能发送一次请求
2014/02/28 Javascript
jQuery中removeAttr()方法用法实例
2015/01/05 Javascript
全面解析Bootstrap表单使用方法(表单按钮)
2015/11/24 Javascript
基于JavaScript实现文字超出部分隐藏
2016/02/29 Javascript
jQuery实现鼠标跟随效果
2017/02/20 Javascript
jQuery自定义元素右键点击事件(实现案例)
2017/04/28 jQuery
vue引入jq插件的实例讲解
2017/09/12 Javascript
Angular实现表单验证功能
2017/11/13 Javascript
浅谈实现vue2.0响应式的基本思路
2018/02/13 Javascript
在vue-cli搭建的项目中增加后台mock接口的方法
2018/04/26 Javascript
Nodejs实现用户注册功能
2019/04/14 NodeJs
vue实现select下拉显示隐藏功能
2019/09/30 Javascript
在vue-cli中引入lodash.js并使用详解
2019/11/13 Javascript
[33:42]LGD vs OG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
理解python中生成器用法
2017/12/20 Python
flask中的wtforms使用方法
2018/07/21 Python
Python Pandas实现数据分组求平均值并填充nan的示例
2019/07/04 Python
Python 格式化输出_String Formatting_控制小数点位数的实例详解
2020/02/04 Python
pytorch简介
2020/11/11 Python
原生canvas制作画图小工具的踩坑和爬坑
2020/06/09 HTML / CSS
英国最大线上综合鞋类商城:Office
2017/12/08 全球购物
秋季运动会稿件
2014/01/30 职场文书
2014年机关后勤工作总结
2014/12/16 职场文书
2015年度班主任自我评价
2015/03/11 职场文书
教师年度考核自我评鉴
2015/08/11 职场文书
学习商务礼仪心得体会
2016/01/22 职场文书
导游词之张家界
2019/10/31 职场文书
mysql如何配置白名单访问
2021/06/30 MySQL
mysql通过group by分组取最大时间对应数据的两种有效方法
2022/09/23 MySQL