5

簡単な解決策があることを願っている簡単な問題があります。

xlwt パッケージを使用して python(2.7) コードを作成し、Excel ファイルを作成しています。プログラムはデータを取得し、常に保存されているファイルに書き込みます。問題は、ファイルを開いてデータを確認し、Python がファイルを保存しようとすると、プログラムがクラッシュすることです。

読み取り用に開いているときに、python にファイルを保存させる方法はありますか?

4

2 に答える 2

1

私の経験では、sashkello は正しく、Excel はファイルをロックします。OpenOffice/LibreOffice でさえこれを行います。ディスク上のファイルをロックし、作業コピーとして一時バージョンを作成します。開いているファイルにアクセスしようとするプログラムは、OS によって拒否されます。その理由は、多くの企業が Excel ファイルをデータベースとして扱っているにもかかわらず、ユーザーが並行性と同期に関連する問題を理解していないためです。

私はLinuxを使用していますが、この動作が発生します(少なくともファイルがSAMBA共有にある場合)。ファイルと同じディレクトリを調べます。.~lock.[ファイル名]# というファイルが存在する場合、別のプログラムからファイルを読み取ることができません。このロックを強制するものはわかりませんが、NTFS 属性であると思われます。cpシンプルなorcat失敗でさえあることに注意してください:cp: error reading ‘CATALOGUE.ods’: Input/output error

更新: 実際のロック メカニズムは、Windows 共有に関連する概念である「oplocks」のようです: http://oreilly.com/openbook/samba/book/ch05_05.html。共有が Samba によって管理されている場合、回避策は特定のファイル タイプのロックを無効にすることです。

veto oplock files = /*.xlsx/

Linux で共有または NTFS を使用していない場合は、スクリプトに書き込み権限がある限り、ファイルを RW できるはずです。デフォルトでは、ファイルを作成したユーザーのみが書き込みアクセス権を持っています。

回避策 2: この制限は、ファイルを Excel/LO で書き込み可能として開いている場合にのみ適用されるようですが、LO では少なくともファイルを読み取り専用として開くことができます ([ファイル] -> [プロパティ] -> [セキュリティ] に移動し、[読み取り] を設定します)。のみ、ファイルを保存して再度開きます)。ただし、これがxlwtのROにもなるかどうかはわかりません。

于 2013-09-25T03:41:22.763 に答える