初学者Python:打开时保存一个excel文件

我有一个简单的问题,我希望能有一个简单的解决scheme。

我正在写python(2.7)使用xlwt包编写excel文件的代码。 程序获取数据并将其写入到一个不断保存的文件中。 问题是,每当我打开文件来检查数据和python试图保存文件的程序崩溃。

有什么办法让python保存文件,当我打开阅读?

我的经验是,sashkello是正确的,Excellocking文件。 即使是OpenOffice / LibreOffice也能做到这一点。 他们将文件locking在磁盘上,并创build一个临时版本作为工作副本。 任何试图访问打开文件的程序都将被操作系统拒绝。 这是因为许多公司将Excel文件视为数据库,但用户并不了解并发和同步所涉及的问题。

我在Linux上,我得到这种行为(至less当文件是在SAMBA共享)。 查看与你的文件相同的目录,如果存在名为.lock。[filename]#的文件,那么你将无法从另一个程序读取你的文件。 我不知道是什么强制这个锁,但我怀疑这是一个NTFS属性。 请注意,即使是一个简单的cpcat失败: cp: error reading 'CATALOGUE.ods': Input/output error

更新:实际的locking机制似乎是“oplocks”,一个连接到Windows共享的概念: http : //oreilly.com/openbook/samba/book/ch05_05.html 。 如果共享由Sambapipe理,则解决方法是禁用某些文件types的locking,例如:

veto oplock files = /*.xlsx/

如果你没有在Linux上使用共享或NTFS,那么只要你的脚本具有写权限,我想你应该能够RW文件。 默认情况下,只有创build该文件的用户才具有写入权限。

回到顶端提供反馈替代方法2:该限制似乎只适用于如果您在Excel / LO中打开该文件为可写,但LO至less允许您以只读方式打开文件(转到文件 – >属性 – >安全性,只有保存并重新打开文件)。 我不知道这是否也会使xlwt的RO。

哈,有趣的是我碰到了你的post。 我其实今晚才实施。

问题在于Excel文件写入,就是这样,而不是两个。 你不能读/写同一个对象。 所以,如果你有另一种方法来保存数据,请做。 我处于一个我没有select的位置,你也可以。

你将需要xlutils这是面包和黄油。

以下是一些示例代码:

 from xlutils.copy import copy wb_filename = 'example.xls' wb_object = xlrd.open_workbook(wb_filename) # And then you can read this file to your hearts galore. # Now when it comes to writing to this, you need to copy the object and work off that. write_object = copy(wb_object) # Write to it all you want and then save that object. 

就是这样,现在如果你读对象,写信给它,并再次读取原来的一个,它不会被更新。 您可能需要重新创buildwb_object或者您需要在内存中创build某种types的表,您可以在处理这些表时进行跟踪。