我有一个遍历文件的功能,进行一些操作,最后将它们存储为列表列表。我在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,但是在Looping不同时猜测列表会追加吗?
答案 0 :(得分:0)
在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