2016-05-10 2 views
2

Ich bin sehr Anfänger, wenn es um Python geht. Ich habe den größten Teil meiner Programmierung in C++ gemacht. Ich habe ein Programm, das die schnelle Fourier-Transformation eines Datensatzes erzeugt und sowohl die Daten als auch die FFT in zwei Fenstern mit Matplotlib darstellt. Anstatt zu plotten, möchte ich die Daten in eine Datei ausgeben. Dies wäre eine einfache Aufgabe für mich in C++, aber ich kann das in Python nicht herausfinden. Die Frage ist also: „Wie kann ich Ausgang POWERx und Powery in eine Datendatei, in der beide Datensätze in separaten Spalten Nachfolgend finden Sie das Programm ist:Python - Ausgabe von zwei Datensätzen (Listen?) Zu Datei als zwei Spalten

import matplotlib.pyplot as plt 

from fft import fft 
from fft import fft_power 
from numpy import array 
import math 
import time 


# data downloaded from ftp://ftp.cmdl.noaa.gov/ccg/co2/trends/co2_mm_mlo.txt 
print ' C02 Data from Mauna Loa' 
data_file_name = 'co2_mm_mlo.txt' 
file = open(data_file_name, 'r') 
lines = file.readlines() 
file.close() 
print ' read', len(lines), 'lines from', data_file_name 

window = False 

yinput = [] 
xinput = [] 

for line in lines : 
    if line[0] != '#' : 
     try: 
      words = line.split() 
      xval = float(words[2]) 
      yval = float(words[4]) 
      yinput.append(yval) 
      xinput.append(xval) 
     except ValueError : 
      print 'bad data:',line 


N = len(yinput) 
log2N = math.log(N, 2) 
if log2N - int(log2N) > 0.0 : 
    print 'Padding with zeros!' 
    pads = [300.0] * (pow(2, int(log2N)+1) - N) 
    yinput = yinput + pads 
    N = len(yinput) 
    print 'Padded : ' 
    print len(yinput) 
    # Apply a window to reduce ringing from the 2^n cutoff 
    if window : 
     for iy in xrange(len(yinput)) : 
      yinput[iy] = yinput[iy] * (0.5 - 0.5 * math.cos(2*math.pi*iy/float(N-1))) 

y = array(yinput) 
x = array([ float(i) for i in xrange(len(y)) ]) 
Y = fft(y) 

powery = fft_power(Y) 
powerx = array([ float(i) for i in xrange(len(powery)) ]) 

Yre = [math.sqrt(Y[i].real**2+Y[i].imag**2) for i in xrange(len(Y))] 


plt.subplot(2, 1, 1) 
plt.plot(x, y) 

ax = plt.subplot(2, 1, 2) 
p1, = plt.plot(powerx, powery) 
p2, = plt.plot(x, Yre) 
ax.legend([p1, p2], ["Power", "Magnitude"]) 
plt.yscale('log') 


plt.show() 
+0

Ziemlich ein bisschen Array/list Objekte hier. Welche möchten Sie in die Datei schreiben? Yinput? Xinput? y? x? Machtvoll? powerx? – Parfait

+0

Die vier Dinge, die ich in eine Datei geschrieben haben möchte, sind die vier Dinge, die gezeichnet werden: powerx, powery, x, Yre –

Antwort

0

Sie einen csv.writer verwenden können() zu erreichen, diese Aufgabe ist, hier der Hinweis: https://docs.python.org/2.6/library/csv.html

Grund Nutzung:

zip Sie Listen in Reihen:

rows=zip(powery,powerx) 

csv-Schreiber Verwenden Sie die Daten in eine cSV-Datei zu schreiben :

+0

Das funktionierte und war, was ich suchte. Sehr geschätzt! –

+0

Bitte abstimmen und als Antwort markieren; damit die zukünftigen Besucher sich dessen bewusst sind. – PseudoAj

0

So können Sie Daten aus zwei verschiedenen Listen in eine Textdatei in zwei Spalten schreiben.

# Two random lists 
index = [1, 2, 3, 4, 5] 
value = [4.5, 5, 7.0, 11, 15.7] 

# Opening file for output 
file_name = "output.txt" 
fwm = open(file_name, 'w') 

# Writing data in file 
for i in range(len(index)): 
    fwm.write(str(index[i])+"\t") 
    fwm.write(str(value[i])+"\n") 

# Closing file after writing 
fwm.close() 

wenn Ihre Listendaten in Form von String enthalten dann ‚str‘ entfernen, während die Daten in der Datei zu schreiben.

Wenn Sie Daten in CSV-Datei ändern

MIT

fwm.write speichern

fwm.write (str (Index [i]) + "\ t") (str (Index [i]) + "")

0

Je nachdem, was Sie wollen für die Datei verwenden, würde ich vorschlagen, entweder das csv Modul oder das json Modul.

die Datei als CSV-Daten Schreiben geben Ihnen die Möglichkeit, es mit einer Tabelle zu öffnen, grafisch darstellen, bearbeiten und usw.

die Datei geschrieben werden als JSON-Daten gibt Ihnen die Möglichkeit, schnell importieren in andere Programmiersprachen, und um es zu überprüfen (in der Regel schreibgeschützt - wenn Sie ernsthaft bearbeiten wollen, gehen Sie mit CSV).