J'essaie de parcourir un grand modèle numérique d'élévation (MNA) et de créer de nouveaux fichiers texte avec des contenus de 4 000 en utilisant Python. Ci-dessous est le code pour itérer dans un fichier ligne par ligne, mais je voudrais augmenter le nombre de lignes écrites dans un nouveau fichier. Toute aide serait grandement appréciée.Utilisation de Python pour effectuer une itération à l'aide d'un grand DEM
import pandas as pd
import numpy as np
#Read in File
df1 = pd.read_table('Large_DEM_File.txt', skiprows=6, chunksize=500)
df = pd.concat(df1)
rows = 320000
y= -1003.00
delta = 0.00025
linecount= 4001
#initialize counter
i = 0
while i <= rows:
for i, row in df.iterrows():
filename = open(str(i)+'.txt','w')
filename.write("ncols 136000\nrows 320000\nxllcorner 122\n")
filename.write("yllcorner %.5f" %(y+rows*delta-(i+1)*delta))
filename.write("\ncellsize 0.00025\nNODATA_value -9999\n")
filename.write(row[0:4000+i])
i += 4000
Énumérer est une grande fonction, mais il ne fonctionne pas toujours bien avec de grandes données. Mon but ultime est d'itérer à travers de grandes données (DEM ascii) sans stocker les données, et segmenter les grandes données dans une mémoire plus digeste pour un calcul plus poussé. J'ai entendu dire que xrange est un moyen possible, mais je n'ai pas beaucoup d'expérience en utilisant cette fonction. – FlyTheW
la différence principale entre mon code ci-dessus et le vôtre n'est pas énumérer, c'est le traitement par morceaux. df_chunk_reader dans mon code est un générateur (comme xrange), mais donnera un morceau de votre ensemble de données à la fois. De cette façon, vous pouvez traiter les données comme vous le souhaitez, par morceaux. la taille des morceaux peut être ce que vous voulez, déterminée par le paramètre chunksize. –
dans votre code de question, vous avez également df1 qui est un générateur qui génère un morceau de votre ensemble de données à la fois. mais au lieu de le traiter par morceaux, votre code concatène tous les morceaux, puis le traite ligne par ligne. Si je comprends bien votre question, vous devriez plutôt la traiter par morceaux comme dans mon code de réponse ci-dessus. –