对于python,我是新手。我用C ++编写了大部分的编程。我有一个程序可以生成数据集的快速傅里叶变换,并使用matplotlib在两个窗口中绘制数据和FFT。我想将数据输出到文件而不是绘图。对于C ++来说,这对我来说是一项简单的任务,但我似乎无法在python中解决这个问题。所以问题是,“如何将powerx和powery输出到两个数据集位于不同列的数据文件中?以下是程序:
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 :(得分:0)
您可以使用csv.writer()来完成此任务,这里是引用:https://docs.python.org/2.6/library/csv.html
基本用法:
压缩列表到行:
rows=zip(powery,powerx)
使用csv writer将数据写入csv文件:
with open('test.csv', 'wb') as f:
writer = csv.writer(f)
for row in rows:
writer.writerow(row)
答案 1 :(得分:0)
这是您可以将两个不同列表中的数据写入两列文本文件中的方法。
# 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()
如果您的列表包含字符串形式的数据,则在文件中写入数据时删除“str”。
如果要在csv文件中保存数据,请更改
fwm.write(STR(指数[I])+ “\ t” 的)
WITH
fwm.write(STR(指数[I])+ “”)
答案 2 :(得分:0)