2014-12-19 73 views
0

循環我有以下代碼:寫作值在csv文件

from math import * 
from scipy.special import * 
import matplotlib.pyplot as plt 
import csv 


## Definition der Parameter für Druckgleichung nach Rudnicki (1986) ## 
q = 6.0/1000         # Fluidmenge pro Fläche und Zeit [l/s] 
rhof = 1000          # Dichte Flüssigkeit [kg/m³] 
lameu = 11.2*10**9        # Lamé-Parameter, undrained [Pa] 
lame = 8.4*10**9        # Lamé-Parameter, drained [Pa] 
pi            # durch Pythonmodul "math" gegeben 
alpha = 0.65         # Biot-Willis-Koeffizient 
G = 8.4*10**9         # Schermodul [Pa] 
k = 1.0e-15          # Permeabilität [m²] bzw. [Darcy] 
eta = 0.001          # Viskosität des Fluids [Pa*s]    
t = 1000*24*3600        # Zeit in [s] 

## Beziehungen der Parameter untereinander ## 
kappa = k/eta             # Berechnung der Permeabilität nach Rudnicki (1986), [m³*s/kg] 
print "kappa ist:",kappa          # Ausgabe Permabilität 
c = (kappa*(lameu-lame)*(lame+2*G))/((alpha**2)*(lameu+2*G)) # Berechnung der Diffusivität 
print "c ist:",c            # Ausgabe der Diffusivität 

## Bereiche der Achsen in [m] ## 
#def drange(start, stop, step): 
# r = start 
# while r <= stop: 
#   yield r 
#   r += step  
xmin = 1 
xmax = 20 
ymin = 1 
ymax = 20 

## Druckberechnung um Bohrung ## 
for x in range (xmin,xmax,1): 
    for y in range (ymin,ymax,1): 
      r = sqrt(x**2+y**2) 
      P = (q/(rhof*4*pi*kappa))*(expn(1,r**2/(4*c*t))) 
      z = P/1e6 
      #print x, " ", y, " ", z 

對於我的輸出中,我想寫一個csv文件我的x,y和z值。它應該看起來像單行內的單元格中的每個x值和同一列內單元格中的每個y值,從而可以爲每個x/y組合顯示一個z值。它應該是這樣的:

x x1  ... 

YZ(X,Y)Z(X 1,Y)...

Y1 Z(X,Y)Z(X1,Y1)...

... ... ...

我是新來的csv模塊,並沒有真正習慣它,特別是如何設置值在正確的地方,以及何時使用它(例如裏面或循環後)。這可能嗎?或者可以將它只能是這樣的(類似我outcommented打印):

XYZ(X,Y)

X Y1 Z(X,Y)

X Y2 Z(X,Y2) ......

對不起,這挺奇怪的和醜陋的格式,但我想你明白我的想法:)

任何幫助 - 一如既往 - 不勝感激!

+0

什麼是'scv'模塊,什麼是'pi'變量?它似乎沒有初始化。 – Marcin 2014-12-19 01:27:15

+0

抱歉Marcin,我忘了糾正這兩個問題。感謝您的提示! – Alex 2014-12-19 12:00:43

回答

1

使用csv模塊,您通常必須一次寫入整行。我相信這個代碼(更換你的決賽圈)將打印出你想要的輸出:

def your_function(x,y): 
      r = sqrt(x**2+y**2) 
      P = (q/(rhof*4*pi*kappa))*(expn(1,r**2/(4*c*t))) 
      z = P/1e6 

x_range = range(xmin,xmax,1) 
y_range = range(ymin,ymax,1) 

print(x_range) 
for y in y_range: 
    this_row = [y] + [your_function(x,y) for x in x_range] 
    print(this_row) 

如果你想要做什麼,它應該是簡單的寫作到CSV更換打印功能。