溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

使用python怎么將csv格式文件轉(zhuǎn)為asc格式文件

發(fā)布時間:2021-02-25 15:27:42 來源:億速云 閱讀:702 作者:戴恩恩 欄目:開發(fā)技術(shù)

本文章向大家介紹使用python怎么將csv格式文件轉(zhuǎn)為asc格式文件的基本知識點總結(jié)和需要注意事項,具有一定的參考價值,需要的朋友可以參考一下。

Python主要用來做什么

Python主要應(yīng)用于:1、Web開發(fā);2、數(shù)據(jù)科學(xué)研究;3、網(wǎng)絡(luò)爬蟲;4、嵌入式應(yīng)用開發(fā);5、游戲開發(fā);6、桌面應(yīng)用開發(fā)。

一、背景描述

csv格式文件是一種類似于excel的文件格式

asc格式文件是一種可以用text打開的文本文件

csv轉(zhuǎn)asc本來可以用arcgis順利完成,但由于csv數(shù)據(jù)量太大(744萬行),arcgis處理不了如此大的文本,所以需要通過寫代碼實現(xiàn)(注:不是用python調(diào)用arcgis工具)

二、格式說明

Csv格式:

使用python怎么將csv格式文件轉(zhuǎn)為asc格式文件

asc圖片

說明:第一列為id,第二列是值,第三第四列為值所在的行列號;csv的數(shù)據(jù)共744萬行,直接打開無法全部加載

asc格式:

使用python怎么將csv格式文件轉(zhuǎn)為asc格式文件

三、舉例

需要的是將csv對應(yīng)的某行某列的值prevalue,寫成asc格式的文件,檢驗是否成功轉(zhuǎn)換的方式:將轉(zhuǎn)成的asc文件加載到arcmap中進行查看,如上面的aspect.asc在arcmap中是下圖所示:

使用python怎么將csv格式文件轉(zhuǎn)為asc格式文件

四、附件說明

附件中給出是一個用作示例的csv,以及上文提到的aspect.asc,用作參考

其實這個小程序的要求簡單來說就是把csv數(shù)據(jù)逐行讀取,然后對應(yīng)地寫成asc格式的文件,關(guān)鍵在于對asc文件格式的理解,希望在看了上述說明后,確定了解asc格式后再進行下一步的操作。

注:在arcmap中,csv轉(zhuǎn)asc是這樣實現(xiàn)的:通過創(chuàng)建xy事件圖層,將csv轉(zhuǎn)shp(此時的csv中prevalue后面是xy坐標(biāo),這里我已經(jīng)將坐標(biāo)轉(zhuǎn)為行列號row、col了),隨后通過要素轉(zhuǎn)柵格工具,將shp轉(zhuǎn)為柵格,最后用柵格轉(zhuǎn)asc工具,將得到最終需要的asc

五、實現(xiàn)方式:

這里是按行依次讀取,所以需要通過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這幾行是一樣的,因為數(shù)據(jù)源是一致的
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循環(huán)是為了提取出一個中間介質(zhì)row_num作為行數(shù)的表示,
  由于從表格中提取的數(shù)據(jù)(行號)并不是數(shù)字類型,
  不能直接使用(1 == f_rows[2]進行判斷,所以直接使用自身的類型。)
  (補充:應(yīng)該是字符串類型)
 '''
 for i,f_rows_temp in enumerate(reader):
 if(i == 0):
  continue
 row_num = f_rows_temp[2]
 print(row_num)
 break
 #遍歷寫入數(shù)據(jù),遍歷行數(shù)(即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刷新,寫入文件數(shù)據(jù)
 print(f_rows[1]) #兩個打印是為了便于觀察數(shù)據(jù)運行情況
 print(f_rows)
 fw.close()
 fr.close()

以上就是小編為大家?guī)淼氖褂胮ython怎么將csv格式文件轉(zhuǎn)為asc格式文件的全部內(nèi)容了,希望大家多多支持億速云!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI