2014-12-30 4 views
-5

У меня есть функция, написанная коллегой, работающей в том же поле. Поэтому я знаю, что должен писать скрипт для выполнения кода на Python, но вопрос о том, как выглядит формат входного файла bbfile, беспокоит меня. Как я вижу, fidlines читает все содержимое, правильно? Мое может касаться bbfile (табуляция, ограниченная в моем случае) , если у него есть три столбца один для freq, другой для breal и третий для bimag?Функция Python, выпуск с входным файлом

def bbcalfunc(bbfile,nfreqlst): 

    fid=file(bbfile,'r') 
    fidlines=fid.readlines() 
    #define the delimiter 
    if bbfile.find('.txt')>=0: 
     delimiter='\t' 
    elif bbfile.find('.csv')>=0: 
     delimiter=',' 

    freq=[] 
    breal=[] 
    bimag=[] 
    for ii in range(1,len(fidlines)): 
     linestr=fidlines[ii] 
     linestr=linestr.rstrip() 
     linelst=linestr.split(delimiter) 
     if len(linelst)>2: 
      freq.append(float(linelst[0])) 
      breal.append(float(linelst[1])) 
      bimag.append(float(linelst[2])) 
     else: 
      pass 

    freq=np.array(freq) 
    breal=np.array(breal) 
    bimag=np.array(bimag) 
    nfreq=np.log10(np.array(nfreqlst)) 

    brinterp=interpolate.splrep(freq,breal) 
    brep=1E3*interpolate.splev(nfreq, brinterp) 

    biinterp=interpolate.splrep(freq,bimag) 
    bip=1E3*interpolate.splev(nfreq, biinterp) 

    return brep,bip 
+0

Таким образом, вы получаете сообщение об ошибке, или что? Кроме того, исправьте форматирование кода. Строка 'def bbcalfunc (bbfile, nfreqlst):' даже не в блоке кода. – Kevin

+0

Вы также забыли закрыть файл: 'fid = file (bbfile, 'r')'. ** Всегда ** открывайте такие файлы: 'wtih open (bbfile, 'r') как fid: fidlines = fid.readlines()'. –

+2

@ Программистам Igor C не нужно редактировать коды python –

ответ

0

Формат входного файла зависит от расширения, которое вы используете, .txt файл будет вкладка значений, разделенных файлов (ТСВ) в то время как .csv файл будет значений, разделенных запятыми (CSV) файл (пожалуйста, обратите внимание, что это не общее соглашение, это то, что было решено вашим коллегой, который написал эту функцию, или, возможно, это локальное соглашение).

Каждая строка файла обычно состоит из трех {tab, comma} разделенных значений, то есть частоты, действительной части и мнимой части сложного значения.

Я сказал, что обычно составлен, потому что код молча отбрасывает все линии , для которых количество элементов меньше трех.

Есть что-то здесь и там, которое может быть упорядочено в коде, , но это несущественно.
Вместо того, чтобы ответить на ваш вопрос повторного закрытия файла, изменить первую часть функции для

def bbcalfunc(bbfile,nfreqlst): 

    #define the delimiter 
    if bbfile.find('.txt')>=0: 
     delimiter='\t' 
    elif bbfile.find('.csv')>=0: 
     delimiter=',' 

    # slurp the file 
    with file(bbfile,'r') as fid: 
     fidlines=fid.readlines() 

    ... 
Смежные вопросы