Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中,如何将结果保存到csv,AttributeError:';dict';对象没有属性';到"csv"x27 ;;_Python - Fatal编程技术网

在python中,如何将结果保存到csv,AttributeError:';dict';对象没有属性';到"csv"x27 ;;

在python中,如何将结果保存到csv,AttributeError:';dict';对象没有属性';到"csv"x27 ;;,python,Python,如何将结果按顺序保存到csv?意思是添加额外的列解释什么是“添加”和什么是“删除”以及什么是“更改” 我尝试了diff.to_csv('diff.csv')并得到了这个错误 Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'dict' object has no attribute 'to_csv' 额外信息 compare(

如何将结果按顺序保存到csv?意思是添加额外的列解释什么是“添加”和什么是“删除”以及什么是“更改”

我尝试了diff.to_csv('diff.csv')并得到了这个错误

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'dict' object has no attribute 'to_csv'
额外信息

compare(
        load_csv(open("list1.csv"), key="ean"),
        load_csv(open("list2.csv"), key="ean")
    )
list1.csv

price, oldprice,title,brand,category,unit,ean,,
17,,VR BOX Virtual Reality 3D Glasses Bluetooth Game Remote Control For Phone Iphone,other,3d glasses,2023700513,272434,,
18,,3d Glasses,other,3d glasses,1493500513,2272434,,
22,,Zefas Active 3D GlassesFor SmartPhones,zefas,3d glasses,1342700513,2272456,,
22.98,,3D Glasses Circular Polarized Lenses for Polarized TV| 3D Cinemas,other,3d glasses,1992100513,2272483,,
25,,max3 pro,other,3d glasses,1904600513,2272432,,
28.27,,Red Blue Clip on Anaglyph Glasses,other,3d glasses,2068900513,2272453,,
price,oldprice,title,brand,category,unit,ean,,
22.98,,3D Glasses Circular Polarized Lenses for Polarized TV| 3D Cinemas,other,3d  glasses,1992100513,2272483,,
25,,max3 pro,other,3d glasses,1904600513,2272432,,
59,,Red-blue Cyan Anaglyph 3D,terratec,3d glasses,2103700513,2272428,,
65,,Sinogoodies Passive 3D GlassesFor SmartPhones,sinogoodies,3d glasses,1603700513,2272464,,
69.91,,G15-DLP 3D Active Shutter Glasses for DLP-LINK DLP LINK 3D for Optoma Sharp LG Acer BenQ Projectors,other,3d glasses,2039200513,227243,,
70,,Sinogoodies Passive 3D GlassesFor Multi,sinogoodies,3d glasses,1603600513,2272464,,
list2.csv

price, oldprice,title,brand,category,unit,ean,,
17,,VR BOX Virtual Reality 3D Glasses Bluetooth Game Remote Control For Phone Iphone,other,3d glasses,2023700513,272434,,
18,,3d Glasses,other,3d glasses,1493500513,2272434,,
22,,Zefas Active 3D GlassesFor SmartPhones,zefas,3d glasses,1342700513,2272456,,
22.98,,3D Glasses Circular Polarized Lenses for Polarized TV| 3D Cinemas,other,3d glasses,1992100513,2272483,,
25,,max3 pro,other,3d glasses,1904600513,2272432,,
28.27,,Red Blue Clip on Anaglyph Glasses,other,3d glasses,2068900513,2272453,,
price,oldprice,title,brand,category,unit,ean,,
22.98,,3D Glasses Circular Polarized Lenses for Polarized TV| 3D Cinemas,other,3d  glasses,1992100513,2272483,,
25,,max3 pro,other,3d glasses,1904600513,2272432,,
59,,Red-blue Cyan Anaglyph 3D,terratec,3d glasses,2103700513,2272428,,
65,,Sinogoodies Passive 3D GlassesFor SmartPhones,sinogoodies,3d glasses,1603700513,2272464,,
69.91,,G15-DLP 3D Active Shutter Glasses for DLP-LINK DLP LINK 3D for Optoma Sharp LG Acer BenQ Projectors,other,3d glasses,2039200513,227243,,
70,,Sinogoodies Passive 3D GlassesFor Multi,sinogoodies,3d glasses,1603600513,2272464,,
运行的屏幕结果

compare(
        load_csv(open("list1.csv"), key="ean"),
        load_csv(open("list2.csv"), key="ean")
    )

此解决方案不起作用

import pandas as pd
dataframe = pd.DataFrame(diff)
dataframe.to_csv("data.csv", header=True)

您可以使用
来创建由
pandas
提供的csv
方法:

import pandas as pd 

df = pd.DataFrame(dict([ (k,pd.Series(v)) for k,v in diff.items() ]))
df.to_csv('diff.csv')

你可以使用熊猫包 安装熊猫

import pandas as pd
added_frame = pd.DataFrame(yourdict['added'])
removed_frame = pd.DataFrame(yourdict['removed'])
df = added_frame.append(removed_frame)
df.to_csv("data.csv", header=True)

错误
'dict'对象没有属性“to_csv”
意味着
diff
变量是一个字典,因此没有名为
.to_csv
的方法

您可以尝试将您的
diff
强制转换为csv文件,但无法正常工作。您的
diff
当前是一个字典,其值为字典数组。此格式不适用于csv。如果使用
Pandas
软件包,则需要词典中包含字符串数组的值。下面是一个例子

我建议您先考虑如何格式化
diff
,然后再转换为csv

实现此功能的一个选项是从
diff
字典创建两个CSV。添加和删除的值实际上是csv的正确格式。以下是一个例子:

import csv

keys = diff['added'][0].keys()
with open('file_name.csv', 'w') as output_file:
  dict_writer = csv.DictWriter(output_file, keys)
  dict_writer.writeheader()
  dict_writer.writerows(diff['added'])
这些是csv包的最新版本


编辑:键应从添加的第一个元素中获取键。

其他解决方案不起作用,因为您的数据没有正确的
数据帧结构。您需要首先从顶级键访问dict列表

导入熊猫
df1=pandas.DataFrame(diff['added'])
df1[“更改”]=“添加”
df2=pandas.DataFrame(差异['removed'])
df2[“更改”]=“已删除”
df=df1.append(df2)
df.to_csv('diff.csv'))
更改每个评论请求
df1=pandas.read\u csv('list1.csv'))
df1['version']='list1'
df2=pandas.read\u csv('list2.csv'))
df2['version']='list2'
#仅保留“版本”、“ean”、“价格”列
diff=df1.append(df2)['version','ean','price']]
#仅保留重复的EAN,这只会发生
#对于两个原始列表中的EAN
diff=diff[diff['ean'].重复(keep=False)]
#做旋转动作https://pandas.pydata.org/pandas-docs/stable/user_guide/reshaping.html
diff=diff.pivot(index='ean',columns='version',values='price')
#返回到正常的数据帧
差异=差异重置索引()
diff.columns.name=无
#重命名列并只保留所需内容
diff=diff.rename(列={'list1':'price1','list2':'price2'})[[ean','price1','price2']
diff['difference']=diff['price2']-diff['price1']


一种方法是从输出dict创建数据帧,然后调用_csv()从DataFrame.can你能写新的代码吗请…另一种方法是使用
csv.DictWriter
@Błotosmętek你能写代码吗请注意这个错误即使列表1和列表2是7*7
值错误:数组必须都是相同的长度
@Hozayfaelifai
diff
格式错误。这行不通。@user3679776您能检查一下这个解决方案吗please@HozayfaEl-Rifai
12:弃用警告:在未来版本中,空系列的默认数据类型将是“object”,而不是“float64”。明确指定一个数据类型以使此警告静音。df=pd.DataFrame(dict([(k,pd.Series(v))表示k,v在diff.items()])
@user3679776这里发生的事情是我们在非字符串列中存储
Nan
值,您能否共享列的类型引发此错误:
ValueError:数组的长度必须相同
您必须使用两个数据帧并相互追加,因为每个列表中的长度不同您能否编写代码请,我共享了所有信息和files@user3679776我写了一个关于如何处理这个问题的选项。但我建议您先考虑如何格式化数据,然后再进行转换。谢谢,但代码会给出此错误
回溯(最后一次调用):文件“C:\Users\A-data\AppData\Local\Programs\Python\Python38-32\try\try2.py”,第12行,在keys=diff['added'].keys()中AttributeError:“list”对象没有属性“keys”
@user3679776好的,我刚刚编辑了这些键。让我知道它是如何进行的。这真的很聪明,你能给出结果(对于列表1和列表2中相同的“ean”),打印列表1和列表2中的价格,并计算它们之间的差异(并排在结果文件的列中),这将非常感谢,(添加3列:列表1中的价格|列表2中的价格|不同)GENIUS,但是给出错误
ValueError:Index包含重复的条目,无法重塑
我将尝试修复错误,看看是否是由list1和list2文件引起的,我在
diff=diff.pivot_表(Index='ean',columns='version',values='price')
中添加了
\u表
,似乎效果很好,非常感谢您,很抱歉打扰您,但当我不得不让其他列(标题|品牌|类别)与其他列(ean |价格1 |价格2 |差异)并排以获得数据结果的完整外观时,我希望您建议对代码进行简单调整。如果我的答案解决了您最初的问题,您应该接受它。如果你有一个新问题,你应该提出一个新问题。