Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.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初学者:在excel文件打开时保存它_Python_Excel_File_Xlwt - Fatal编程技术网

Python初学者:在excel文件打开时保存它

Python初学者:在excel文件打开时保存它,python,excel,file,xlwt,Python,Excel,File,Xlwt,我有一个简单的问题,我希望能有一个简单的解决办法 我正在使用xlwt包编写python(2.7)代码来编写excel文件。该程序获取数据并将其写入一个不断保存的文件中。问题是,每当我打开文件检查数据,python试图保存文件时,程序就会崩溃 当我打开文件阅读时,有没有办法让python保存它?哈,有趣的是我看到了你的帖子。事实上,我今晚刚刚实现了这个 问题是Excel文件会写入,仅此而已,而不是两者兼而有之。不能读取/注销同一对象。因此,如果您有其他方法来保存数据,请这样做。我现在的处境是我别无

我有一个简单的问题,我希望能有一个简单的解决办法

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


当我打开文件阅读时,有没有办法让python保存它?

哈,有趣的是我看到了你的帖子。事实上,我今晚刚刚实现了这个

问题是Excel文件会写入,仅此而已,而不是两者兼而有之。不能读取/注销同一对象。因此,如果您有其他方法来保存数据,请这样做。我现在的处境是我别无选择。。你也可以

你将需要
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. 

就是这样,如果你读了这个对象,写了它,再读一次原始的,它就不会被更新了。您需要重新创建
wb_对象
,或者需要在内存中创建某种类型的表,以便在处理该对象时跟踪它。

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


我在linux上,并且我有这种行为(至少当文件在SAMBA共享上时)。在与文件相同的目录中查找,如果存在名为.~lock.[filename]#的文件,则无法从其他程序读取文件。我不确定是什么强制了这个锁,但我怀疑它是NTFS属性。请注意,即使是简单的
cp
cat
也会失败:
cp:读取'catalog.ods'时出错:输入/输出错误

更新:实际的锁定机制似乎是“oplocks”,这是一个与Windows共享相关的概念:。如果共享由Samba管理,解决方法是禁用某些文件类型的锁,例如:

否决oplock文件=/*.xlsx/

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


解决方法2:该限制似乎仅适用于在Excel/LO中以可写方式打开文件的情况,但LO至少允许以只读方式打开文件(转到文件->属性->安全,设置只读,保存并重新打开文件)。我不知道这是否也会使xlwt成为RO。

这不是python的问题-这是Excel的一个功能。我想以前有人问过……根据我的经验,萨什凯洛是正确的。甚至OpenOffice/LibreOffice也能做到这一点。他们将文件锁定在磁盘上,并创建一个临时版本作为工作副本。任何试图访问打开文件的程序都将被操作系统拒绝。这是因为许多公司将Excel文件视为数据库,但用户不了解并发和同步所涉及的问题。LibreOffice不这样做,至少我的版本(在Linux上)不这样做。我只是用Excel观察它。找不到它,我相信我以前看到过这样一个问题……我在linux上,我有这种行为(至少当文件在SAMBA共享上时)。在与文件相同的目录中查找,如果存在名为
~lock.[filename]#
的文件,则无法从其他程序读取文件。我不确定是什么强制了这个锁,但我怀疑它是NTFS属性。请注意,即使是一个简单的
cp
cat
也会失败:
cp:error reading'catalog.ods':Input/output error
这非常有用,但并不完全是我现在要找的。(但那应该是两个小时前的事了,该死的)我只是想在我还没打开的时候把我的书写本保存下来。复制文件似乎有助于覆盖它。那么,修复方法是什么呢?是否至少有一种方法可以确保文件在保存前未打开?我无法理解它的代码。事实上!我才明白你的意思!谢谢你解决了这个问题!