2017-08-09 3 views
0

ich meine Eingangstextdatei in dieser Form habenPython: Löschen einer Spalte, eine andere zu ändern und die Ausgabe auf eine Datei zu schreiben

1 2 3 4 
5 6 7 8 
9 10 11 12 

ich es als Eingabe nehmen müssen, die letzte Spalte löschen und multiplizieren die drittens durch einen konstanten Wert, sagen wir zum Beispiel 10. Die endgültige Ausgabe sollte also so aussehen:

1 2 30 
5 6 70 
9 10 110 

All dies muss in einer separaten Ausgabedatei gespeichert werden. Wie geht das in Python?

+0

entweder tun es manuell durch jede Zeile zu lesen und die Operationen durchführen oder versuchen, Datenrahmen zu verwenden, wenn möglich –

Antwort

1

PS: nur Probe.

import csv 
ff = open("output.csv","w") # added the line 
csvwriter = csv.writer(ff) # added the line 
with open(file, "r") as logFile: 
    reader = csv.reader(logFile,delimiter=" ") 
    row = [] 
    for line in reader: 
     col1 = lin[0] 
     col2 = lin[1] 
     col3 = int(lin[2]) * 10 
     row = [col1,col2,col3] 
     print row 
     csvwriter.writerow(row) # added the line 
     del row[:] # added the line 
+0

kann ich nicht einfach ich in eine Datei ausgeben müssen gedruckt werden, wie dies zu tun? – johnhenry

+0

@johnhenry hinzugefügt die Funktionalität. ermutigen Sie, darüber zu üben. – ggupta

1

Sie können dies versuchen:

f = [map(int, i.strip('\n').split()) for i in open('thefile.txt')] 

new_f = [i[:-1] for i in f] 

new_f = [i[:-1]+[i[-1]*10] for i in new_f] 

new_file = open('final_file.txt', 'a') 

for i in new_f: 
    new_file.write(' '.join(map(str, i))+"\n") 

new_file.close() 
+0

Wie kann ich beim Schreiben der Ausgabedatei die letzte Spalte überspringen? – johnhenry

+0

@johnhenry behoben. Bitte sehen Sie meine letzte Änderung. – Ajax1234

2
import pandas as pd 
with open('textfile.txt') as f: 
    df = pd.read_csv(f, header=None, sep=' ') 

df = df.drop(3, 1) # 3 = column name, 1 indicates columns 
df[2] = df[2] * 10 
df.to_csv(r'output.txt', header=None, index=None, sep=' ', mode='a') 
+0

es erzeugt: df = df.drop (3, 1) # 3 = Spaltenname, 1 zeigt Spaltenbeschriftungen [3] an, die nicht in der Achse enthalten sind – johnhenry

+0

Dieser Fehler hat etwas mit der Eingabedatei und dem (sep = '') zu tun Befehl. Wenn diese Datei tabulatorgetrennt ist, sollten Sie (sep = '\ t') verwenden – Bokje

1

einfach die Datei wie gewohnt öffnen und es für Newline Streifen und Räume und die Sie eine gewünschte Liste haben. REOPEN die gleiche Datei im Schreibmodus, um den vorhandenen Inhalt zu überschreiben. Dann überschreiben Sie die ersten sechs Werte und die nächsten drei um das Vielfache dieser mit der Konstante und verwenden Zeilenumbrüche nach Bedarf.

1

Kurz Umsetzung:

with open('filename') as f: 
    inp = f.readlines() 
inp = [ i.strip().split(' ')[:-1] for i in inp ] 
out = '\n'.join([ ' '.join(i[:-1]) + ' ' + str(int(i[-1])*10) for i in inp ]) 
with open('filename','w') as f: 
    f.write(out) 
1

Ich habe versucht, alle vorgeschlagenen Antworten, aber ich denke, dass dies die einfachste Implementierung ist. Einige der Antworten wurden nicht richtig ausgeführt, wenn meine Eingabedatei eingegeben wurde, oder sie waren nur teilweise Antworten auf meine Frage.

import numpy as np 

factor= 10 

a = np.loadtxt("inputfile.d") 

b = a[:, :3] 
b[:, 2] = factor*b[:, 2] 
np.savetxt('outputfile.d',b) 
Verwandte Themen