2012-04-30 3 views
1

J'ai un programme qui crée une sortie d'un fichier XYZ mais pour une raison quelconque les fichiers produits sont YXZ, j'ai besoin des colonnes x et y être commuté. De plus, les valeurs x et y ont un marquage hémisphérique à la fin. Exemple:Utilisation de Python pour reformater un fichier texte délimité par des tabulations en un format utilisable par un autre programme

00.000000W 000.000000S 0.000 

Je dois enlever ces marques de l'hémisphère et de multiples valeurs de -1 pour les rendre un vrai format de degré décimal je peux les lire dans mon prochain programme. Toute valeur avec un "S" ou "W" à la fin devra être multipliée par -1, toute valeur avec "N" ou "E" à la fin peut être simplement supprimée. Si cela peut être fait, cela me permettra d'économiser d'innombrables heures. Je peux effectuer cette opération avec Excel, mais parfois mes fichiers sont trop grands pour travailler avec. S'il vous plaît toute aide que je peux obtenir serait génial.

C'est ce que j'ai jusqu'ici et cela fonctionne pour changer la valeur X et Y, mais je suis bloqué sur enlever et multiplier par -1 pour toute valeur se terminant par "S" ou "W".

infile="my.txt" 
outfile="my_edited.txt" 

read_infile=open(infile,'r') 
write_outfile=open(outfile,'w') 

reader=csv.reader(read_infile, delimiter='\t') 
writer=csv.writer(writting, delimiter='\t') 

for row in reader: 
    writer.writerow([row[1], row[0], row[2]]) 
+0

hack qui fonctionne, mais est mauvais et non pythonique: 'pour la ligne dans le lecteur: NEW_ROW = [] new_row.append (float (ligne [1] [: - 1] * [-1 , 1] [ligne [1] [- 1] dans "NE"]) new_row.append (float (ligne [0] [: - 1] * [-1,1] [ligne [0] [- 1] dans "NE"]) new_row.append (float (ligne [2])) writer.writerow (new_row) ' J'espère que quelqu'un vous écrira une réponse plus raisonnable. – David

Répondre

0

Cette réponse conserve tout comme une chaîne, et suppose que annexant "-1" au début d'une chaîne est assez pour le rendre négatif. Notez que ''.join(["Hello, ", "World!"]) est en fait le moyen Pythonic de concaténer des chaînes, et que -1 récupère le dernier caractère d'une chaîne: [1,2,3][-1] == 3.

infile="my.txt" 
outfile="my_edited.txt" 

read_infile=open(infile,'r') 
write_outfile=open(outfile,'w') 

reader=csv.reader(read_infile, delimiter='\t') 
writer=csv.writer(write_outfile, delimiter='\t') 

for row in reader: 
    lng = row[0][:-1] 
    lat = row[1][:-1] 

    if row[0][-1] == 'W': 
     lng = ''.join(["-1", lng]) 

    if row[1][-1] == 'S': 
     lat = ''.join(["-1", lat]) 

    writer.writerow([lat, lng, row[2]]) 
Questions connexes