'str' object has no attribute 'append' attribute error 当我尝试附加到字典时
'str' object has no attribute 'append' attribute error when i try append to dictionaries
我是一名初级程序员,这是我第一次 post 访问此网站。
我试图将值附加到字典中的现有键,但我不断收到属性错误。我已经尝试将值附加到另一个项目的现有密钥,并且效果很好。所以我几乎处于死胡同。
如果你们能指出我的错误并帮助我修复我的代码,我将不胜感激。
编辑::
经过几个回答我想,我需要更好地解释一下我的情况和我要达到的目标。
我的情况是,当我进行实验时,我从需要提取数据的地方获得了大约一百个文件(我将在下面的 link 中提供其中的一些文件)。
我想要实现的是从文件夹中的文件中提取所有数据并将其放入一个类似 .csv 样式的文件中。所以我可以更轻松地将它导入 Originlab(类似于 Excel)。
我想我的代码会做这样的事情:
提取的第一个文件:
0.9761
0.9793
0.9825
0.9852
0.9850
0.9861
0.9848
0.9881
提取的第二个文件:
0.9761 0.9850
0.9793 0.9756
0.9825 0.9751
0.9852 0.9765
0.9850 0.9753
0.9861 0.9803
0.9848 0.9856
0.9881 0.9864
等等...
可用空格space或逗号分隔
我之所以需要一个键上的多个值,是因为这些数字是 y 轴的值,所有数据集在 x 轴上都具有相同的值。
Link 文件:
Share files
我的代码:
import glob
import os
def main():
direct = r"C:\Users\Inzaghi\Desktop\Ondra_origin"
main_dict={}
for filename in glob.glob(os.path.join(direct, '*.spe')):
with open(filename,'r') as file:
print ('file read: ' + filename)
lst=[]
for line in file:
line = line.replace('# ','')
if len(line) == 14:
line = line.rstrip().split()
lst.append(line[1])
for count, n in enumerate(lst[:-4]):
if count in main_dict:
main_dict[count].append(n)
else:
main_dict[count]=n
with open (direct+'\celkovy_file.txt','a') as f:
for i in range(0,len(main_dict)):
f.write(main_dict[i] + '\n')
print('Done')
if __name__=='__main__':
main()
main_dict[count] += n
应该会给你想要的结果
虽然这会使值变成一个长字符串。如果您希望值是一个列表,您可以这样做:
if count in main_dict:
main_dict[count].append(n)
else:
main_dict[count]= [n]
改变这个
for count, n in enumerate(lst[:-4]):
if count in main_dict:
main_dict[count].append(n)
else:
main_dict[count]=n
到
for count, n in enumerate(lst[:-4]):
main_dict.setdefault(count, []).append(n)
dict.setdefault
方法将为键(在本例中为空列表)设置一个默认值(如果它不在字典中)。如果存在,append
方法将迭代项附加到其对应的值列表。
我是一名初级程序员,这是我第一次 post 访问此网站。 我试图将值附加到字典中的现有键,但我不断收到属性错误。我已经尝试将值附加到另一个项目的现有密钥,并且效果很好。所以我几乎处于死胡同。 如果你们能指出我的错误并帮助我修复我的代码,我将不胜感激。
编辑::
经过几个回答我想,我需要更好地解释一下我的情况和我要达到的目标。
我的情况是,当我进行实验时,我从需要提取数据的地方获得了大约一百个文件(我将在下面的 link 中提供其中的一些文件)。
我想要实现的是从文件夹中的文件中提取所有数据并将其放入一个类似 .csv 样式的文件中。所以我可以更轻松地将它导入 Originlab(类似于 Excel)。
我想我的代码会做这样的事情:
提取的第一个文件:
0.9761
0.9793
0.9825
0.9852
0.9850
0.9861
0.9848
0.9881
提取的第二个文件:
0.9761 0.9850
0.9793 0.9756
0.9825 0.9751
0.9852 0.9765
0.9850 0.9753
0.9861 0.9803
0.9848 0.9856
0.9881 0.9864
等等...
可用空格space或逗号分隔
我之所以需要一个键上的多个值,是因为这些数字是 y 轴的值,所有数据集在 x 轴上都具有相同的值。
Link 文件: Share files
我的代码:
import glob
import os
def main():
direct = r"C:\Users\Inzaghi\Desktop\Ondra_origin"
main_dict={}
for filename in glob.glob(os.path.join(direct, '*.spe')):
with open(filename,'r') as file:
print ('file read: ' + filename)
lst=[]
for line in file:
line = line.replace('# ','')
if len(line) == 14:
line = line.rstrip().split()
lst.append(line[1])
for count, n in enumerate(lst[:-4]):
if count in main_dict:
main_dict[count].append(n)
else:
main_dict[count]=n
with open (direct+'\celkovy_file.txt','a') as f:
for i in range(0,len(main_dict)):
f.write(main_dict[i] + '\n')
print('Done')
if __name__=='__main__':
main()
main_dict[count] += n
应该会给你想要的结果
虽然这会使值变成一个长字符串。如果您希望值是一个列表,您可以这样做:
if count in main_dict:
main_dict[count].append(n)
else:
main_dict[count]= [n]
改变这个
for count, n in enumerate(lst[:-4]):
if count in main_dict:
main_dict[count].append(n)
else:
main_dict[count]=n
到
for count, n in enumerate(lst[:-4]):
main_dict.setdefault(count, []).append(n)
dict.setdefault
方法将为键(在本例中为空列表)设置一个默认值(如果它不在字典中)。如果存在,append
方法将迭代项附加到其对应的值列表。