python如何向表格中添加数据,不覆盖原有数据?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python如何向表格中添加数据,不覆盖原有数据?相关的知识,希望对你有一定的参考价值。

比如,我从网站获取一个数填入表格,再一次从网站获取数据,依次填入下一行

参考技术A import xlrd
from xlutils.copy import copy
向已存在Excel中添加sheet:
#打开需要操作的excel表
wb=xlrd.open_workbook(path)
#复制原有表
newb=copy(wb)
#新增sheet
wbsheet=newb.add_sheet(“sheet名”)
向已存在sheet中添加行
#获取原有excel表中名为‘table'的sheet
tabsheet = newb.get_sheet('table')
#k表示该sheet的最后一行
k=len(tabsheet.rows)
#在原有sheet后面新增数据
tabsheet.write(k,0,data1)
tabsheet.write(k,1,data2)
望采纳!
参考技术B 你把你的代码贴一下,看看是哪里的问题。
你的代码必须要体现打开文件,填数据,保存文件的操作。追问

执行前

执行后

我想要不覆盖掉前面的内容

追答

第三、4行是新建工作表
去掉
第二行已经得到了原来的表了。

本回答被提问者采纳

如何在不覆盖的情况下向 Firebase Firestore 添加值?

【中文标题】如何在不覆盖的情况下向 Firebase Firestore 添加值?【英文标题】:How to add values to Firebase Firestore without overwriting? 【发布时间】:2018-08-29 04:14:10 【问题描述】:

我有两个活动,我分别从这两个活动向 Firestore 添加数据。但是,每当我向 Firestore 添加第二个活动数据时,它都会覆盖第一个活动数据。我在两个活动中使用了以下代码:

 firebaseFirestore.collection("Users").document(user_id).set(data)

如何停止覆盖?我想将两个活动数据保存在同一个user_id

【问题讨论】:

user_id下方的每个活动再添加一个孩子 如何添加孩子。你能告诉我..@Dumbo 【参考方案1】:

试试这个直接更新

db.collection('cities').doc('restaurants').update( rating:"3.2" );

只有字段等级会改变,其余字段保持不变。

假设您有 3 个字段,并且只想更改其中的 2 个,您也可以用不同的方式进行此操作

// You get the document 'restaurants' and then do the below
db.collection('cities').doc('restaurants').get().then((doc) => 

    // Get the rating field string, parse it to a float, remove 0.4 from it and
    // set it to a tmp variable
    var tmpRating = parseFloat(doc.data()['rating']) - 0.4;

    // Get the array of strings field 'menu' and set it to a tmp variable
    var tmpMenu = doc.data()['menu'];

    // Push 'spaghetti' string to the tmp array of strings( Can also put an
    // adapting string variable instead of a specific string like 'spaghetti'
    tmpMenu.push('spaghetti');

    // Update only the specific fields 'rating' and 'menu' and keep the rest unchanged.
    db.collection('cities').doc(doc.id).update(
        rating: toString(tmpRating), // Don't forget to separate them by commas
        menu: tmpMenu
    );
);

【讨论】:

【参考方案2】:

根据文档,您可以将merge:true 用作第二个参数,根据我的经验,问题通常在于您尝试使用相同的密钥存储不同的数据。

即使使用merge: true 也会始终使用您传入的值更新当前键。

Merge:true 仅当密钥不存在时才有效。我相信文档中的每个键都必须是唯一的。

为了测试它尝试使用不同的键传递(保持merge: true 作为第二个参数)数据,它将合并到现有的。

【讨论】:

【参考方案3】:

有两种方法可以实现这一目标。第一个是使用Map:

Map<String, Object> map = new HashMap<>();
map.put("yourProperty", "yourValue");
firebaseFirestore.collection("Users").document(user_id).update(map);

如您所见,我使用了update() 方法而不是set() 方法。

第二种方法是像这样使用模型类的对象:

YourModelClass yourModelClass = new YourModelClass();
yourModelClass.setProperty("yourValue");
firebaseFirestore.collection("Users").document(user_id)
    .set(yourModelClass, SetOptions.mergeFields("yourProperty"));

如您所见,我使用了set() 方法,但我将SetOptions.mergeFields("yourProperty") 作为第二个参数传递,这意味着我们只对特定字段进行更新。

【讨论】:

你实现了更新值而不覆盖吗? ....我明白了,但是稍后我又遇到了另一个问题。我在布局中使用了 ScrollView。但它不会滚动全部内容。滚动后,它仍然在底部留下一些可滚动的部分。它在屏幕底部形成了一个不寻常的小空白。我该如何解决它 这基本上是另一个问题。为了遵守本社区的规则,请再次提出新问题,以便我和其他用户可以帮助您。 我的回答对您有帮助吗? @NadeemShaikh 我认为answer 可能会有所帮助。【参考方案4】:

如果您知道用户文档已经存在于 firestore 中,那么您应该使用

firebaseFirestore.collection("Users").document(user_id).update(data)

如果你不知道文档是否存在,那么你可以使用

firebaseFirestore.collection("Users").document(user_id).set(data, merge:true)

这将执行数据的深度合并

您也可以使用子集合来做到这一点

【讨论】:

【参考方案5】:

我建议您再添加一个文档或集合,以便为单个用户存储更多的数据值。 您可以为这两个活动创建一个文档引用:

firebaseFirestore.collection("Users").document(user_id+"/acitivity1").set(data);
//and  
firebaseFirestore.collection("Users").document(user_id+"/acitivity2").set(data);

或者你可以为它创建一个子集合:

firebaseFirestore.collection("Users").document(user_id)
                  .collection("Activities").document("acitivity1").set(data);
//and
firebaseFirestore.collection("Users").document(user_id)
                  .collection("Activities").document("acitivity2").set(data);

更多关于分层数据there。

【讨论】:

以上是关于python如何向表格中添加数据,不覆盖原有数据?的主要内容,如果未能解决你的问题,请参考以下文章

python xlwt写入到表格里,会覆盖之前的内容,怎么做不覆盖之前的内容

Python Pandas 向DataFrame中添加一行/一列

python中如何将测试结果写入到原有的excel表格

Excel在原有数据表格上加入新数据之后为啥显示不了?

SQL执行插入时,遇到重复键值时,如何设置才能让新插入的数据覆盖原有旧数据;要用存储过程么?

Python向excel中写入数据的方法 方法简单