python实现csv格式文件转为asc格式文件

一、背景描述
csv格式文件是一种类似于excel的文件格式
asc格式文件是一种可以用text打开的文本文件
csv转asc本来可以用arcgis顺利完成,但由于csv数据量太大(744万行),arcgis处理不了如此大的文本,所以需要通过写代码实现(注:不是用python调用arcgis工具)


二、格式说明
Csv格式:
asc图片
说明:第一列为id,第二列是值,第三第四列为值所在的行列号;csv的数据共744万行,直接打开无法全部加载
asc格式:
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()

题解下载链接

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值