如何在运行python循环时将嵌套列表附加到列表中?

2024-04-23 20:30:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个遍历文件的函数,它执行一些操作,最后将它们存储为列表。我在R中做了这个,现在我正在尝试将它传递给python。我现在的代码如下

def read_raw_spec(infile):
## to be filled later
rw_spec =  []
## loop over all files
for file in infile:
    ## Extract metadata
    with open(file, "r") as f:
        lines = f.readlines()[0:38]
        element = str(lines[11][(lines[11].find(":")+2):(len(lines[11])-1)])
        edge = str(lines[10][(lines[10].find(":")+2):(len(lines[10])-1)])
        E_zero_load = float(lines[12][(lines[12].find(":")+2):(len(lines[12])-1)])
        filename = str([os.path.basename(file)])
        rw_specdat = pd.read_csv(file,delim_whitespace = True, skiprows = 39,  engine = "python")
        rw_specdat = rw_specdat.loc[:,'#':'e']
        rw_specdat = (rw_specdat.rename(index=str, columns={"#":"Energy", "e":"raw_abs"}), E_zero_load)
        rw_spectemp = [{'name':filename, 'element' : element, 'edge' : edge, 'data' : list(rw_specdat)}]

        if rw_spec is None: 
            rw_spec = rw_spectemp
        else:
            rw_spec = rw_spec.append(rw_spectemp)
return rw_spec

不过,当我运行代码时,它只接受最后一项并将其添加到列表中。当我期望从每个文件中得到几个嵌套列表时。这种方法适用于Pandas,但是猜测列表在循环时追加是不同的?你知道吗


Tags: 文件代码列表readlenelementfindfile
1条回答
网友
1楼 · 发布于 2024-04-23 20:30:51

在python中,list.append()是一个操作,因此返回None。你知道吗

if rw_spec is None: 
    rw_spec = rw_spectemp
else:
    rw_spec = rw_spec.append(rw_spectemp)
    # This makes rw_spec None

假设您有偶数个文件,这导致最后一次迭代使rw_spec无,然后在最后一次迭代中,rw_spec被分配最后一个文件的rw_spectemp,并返回它。你知道吗

list相反,pandas.DataFrame.append返回appended DataFrame,而不是None。因此,重新分配工作。你知道吗

只需按以下方式更改上述块即可解决问题:

if rw_spec is None: 
    rw_spec = rw_spectemp
else:
    rw_spec.append(rw_spectemp)
    # This makes rw_spec None

相关问题 更多 >