Python函数,输入文件问题

时间:2014-12-30 12:58:20

标签: python

我有一个在同一领域工作的同事写的功能。所以我知道我应该编写脚本来执行python代码,但是输出bbfile的格式看起来像是困扰我的问题。当我看到fidlines读取所有内容时,对吗?我可能关心的是bbfile(在我的情况下用tab分隔) ,它应该有三列用于freq,其他用于breal,第三列用于bimag吗?

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

1 个答案:

答案 0 :(得分:0)

输入文件的格式取决于您使用的扩展名,.txt文件将是制表符分隔值(tsv)文件,而.csv文件将是逗号分隔值(csv) )文件(请注意,这不是一般惯例,它是由您的同事编写该函数决定的,或者它可能是本地约定。)

文件的每一行通常由三个{tab,逗号}分隔值组成,即复数值的频率,实部和虚部。

我说通常是,因为代码会默默地丢弃所有的 元素数少于三的行。

在这里和那里可以简化代码, 但它是不必要的 相反,要回答关闭文件的问题,请更改第一部分

的功能
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()

    ...