2017-12-30 41 views
0

私の研究用にこのコードを作成しましたが、たくさんのデータファイルに使用したいのですが、手動で行う必要はありません。ファイル。希望のデータファイルの名前を入力するだけで、Pythonでinputコマンドを使用する方法(私はWindows OS上でPython 2.7を使用します)を使用する方が高速です。これまでの私のコード:Pythonコードの入力クエリ

import iodata as io 
import matplotlib.pyplot as plt 
import numpy as np 
import time 
from scipy.signal import welch 
from scipy import signal 

testInstance = io.InputConverter() 
start = time.time() 
conversionError = io.ConversionError() 
#data = testInstance.convert(r"S:\Doktorat\Python\", 1", conversionError) 
data = testInstance.convert(r"/Users/PycharmProjects/Hugo/20160401", "201604010000", conversionError) 
end = time.time() 
print("time elapsed " + str(end - start)) 

if(conversionError.conversionSucces): 
    print("Conversion succesful") 
if(conversionError.conversionSucces == False): 
    print("Conversion failed: " + conversionError.conversionErrorLog) 
print "Done!" 

# Create a new subplot for two cannals 1 & 3 
a = np.amin(data.data) 
Bx = data.data[0,] 
By = data.data[1,] 
dt = float(300)/266350 
Fs = 1/dt 
t = np.arange(0,300,dt*1e3) 
N = len(Bx) 
M = len(By) 
time = np.linspace(0,300,N) 
time2 = np.linspace(0,300,M) 

filename = 'C:/Users/PycharmProjects/Hugo/20160401/201604010000.dat' 
d = open(filename,'rb') 
degree = u"\u00b0" 
headersize = 64 
header = d.read(headersize) 
ax1 = plt.subplot(211) 
ax1.set_title(header[:16] + ', ' +         # station name 
    'Canals: '+header[32:33]+' and '+header[34:35]+ ', '   # canals 
    +'Temp'+header[38:43]+degree+'C'        # temperature 
    +', '+'Time:'+header[26:32]+', '+'Date'+' '+header[16:26])  # date 

plt.ylabel('Pico Tesle [pT]') 
plt.xlabel('Time [ms]') 
plt.grid() 
plt.plot(time[51:-14], Bx[51:-14], label='Canal 1', color='r', linewidth=0.1, linestyle="-") 
plt.plot(time2[1:-14], By[1:-14], label='Canal 3', color='b', linewidth=0.1, linestyle="-") 
plt.legend(loc='upper right', frameon=False,) 

# Create a new subplot for FFT 
plt.subplot(212) 
plt.title('Fast Fourier Transform') 
plt.ylabel('Power [a.u.]') 
plt.xlabel('Frequency Hz') 
xaxis2 = np.arange(0,470,10) 
plt.xticks(xaxis2) 
fft1 = (Bx[51:-14]) 
fft2 = (By[1:-14]) 
plt.grid() 

# Loop for FFT data 
for dataset in [fft1]: 
    dataset = np.asarray(dataset) 
    freqs, psd = welch(dataset, fs=266336/300, window='hamming', nperseg=8192) 
    plt.semilogy(freqs, psd/dataset.size**0, color='r') 

for dataset2 in [fft2]: 
    dataset2 = np.asarray(dataset2) 
    freqs2, psd2 = welch(dataset2, fs=266336/300, window='hamming', nperseg=8192) 
    plt.semilogy(freqs2, psd2/dataset2.size**0, color='b') 
plt.show() 

あなたはinputを置く方が良いでしょうし、私は、コードを実行したときに、私が代わりに一つ一つのpythonfileを作成するのpythonになどのファイル名の名前を書くことができますいくつかの場所がある見ることができるようにコード内に指定された情報を持ちます。 Btw。 PythonをPythonに使用します。あなたがやろうとしているすべてのハードコードされたパス名を取り除くされている場合は

+1

を見ますfilename'はハードコーディングされませんか? – Carcigenicate

+0

@ Carcigenicate私は私の質問があまりにも具体的ではないと思う。見て、私は測定ステーションからのデータを持っています、ここでは "ヒューゴ"です。そしてそれらのステーションから、私はファイルに保存された多くの測定値を持っています。私が必要とするのは、コードを実行して、入力コマンドを入力するだけです。ファイル:Hugo、Measurement:201604010000を実行してください。 – Hiddenguy

+0

コミュニティにようこそ。あなたの問題を解決するための答えが得られた場合は、それを受け入れるべきです。 「回答の受付方法」(https://meta.stackexchange.com/a/5235)を参照してください。 – jk622

答えて

1

すると、あなたが入力変数で自分の名前の文字列をフォーマットすることができるはず

name = raw_input("Name: ") 
measurement = raw_input("Measurement: ") 
filename = "C:/Users/PycharmProjects/{0}/{1}".format(name, measurement) 

は `だから、あなただけの希望raw_inputstring formatting