当前位置: 首页 > 面试题库 >

打开文件以使用Python进行独占访问的最佳方法是什么?

澹台星光
2023-03-14
问题内容

解决此问题的最佳方法是:

  • 打开文件进行读取,但前提是尚未打开文件进行写入
  • 打开文件进行写入,但前提是尚未打开文件进行读取或写入

内置函数的工作方式如下

>>> path = r"c:\scr.txt"
>>> file1 = open(path, "w")
>>> print file1
<open file 'c:\scr.txt', mode 'w' at 0x019F88D8>
>>> file2 = open(path, "w")
>>> print file2
<open file 'c:\scr.txt', mode 'w' at 0x02332188>
>>> file1.write("111")
>>> file2.write("222")
>>> file1.close()

scr.txt现在包含“ 111”。

>>> file2.close()

scr.txt已被覆盖,现在包含“ 222”(在Windows上为Python 2.4)。

该解决方案应在同一进程内工作(如上例所示),以及在另一个进程打开文件时。
如果崩溃的程序无法使锁保持打开状态,则是首选。


问题答案:

我认为没有完全跨平台的方式。在unix上,fcntl模块将为您执行此操作。但是在Windows上(我假设您是通过路径访问的),您将需要使用win32file模块。

幸运的是,在Python
Cookbook上有一个使用平台适当方法的可移植实现(portalocker)。

要使用它,请打开文件,然后调用:

portalocker.lock(file, flags)

其中标志是portalocker.LOCK_EX用于独占写访问,而LOCK_SH用于共享读访问。



 类似资料:
  • 我遇到了一个问题。我的网页有一个控件。值更改后(通过选择不同的值),页面将刷新并呈现内容。 下面是我的代码: 第二部分:

  • 问题内容: 如何简单地从本地Python(3.0)脚本SSH到远程服务器,提供登录名/密码,执行命令并将输出打印到Python控制台? 我宁愿不使用任何大型外部库或在远程服务器上安装任何东西。 问题答案: 我没有尝试过,但是这个pysftp模块可能会有所帮助,而后者又使用了paramiko。我相信一切都在客户端。 有趣的命令可能是在远程计算机上执行任意命令。(该模块的功能和方法也更多地暗示了它的F

  • 问题内容: 我有一个不完整的csv文件,需要准确更新,因此有这样的csv文件: 自然地,文件要复杂得多,但是以这种格式,这是我要在7到8(或任何范围)之间插入或n个单词的内容。我怎样才能做到这一点? 伪代码,代码或示例都很好,我不知道如何开始。 更新: 也许我应该将其转换为数组或某种数据结构。然后,在特定位置插入新项目,将其余内容右移,并在每次插入时执行该操作。 我不知道是否正确的方法或如何开始对

  • 问题内容: 我有一个程序,可以执行大量计算并经常将其报告到文件中。我知道频繁的写入操作会大大降低程序的速度,因此,为了避免出现这种情况,我希望有一个专门用于写入操作的线程。 现在,我正在用我写的这堂课(不耐烦的可以跳到问题的结尾): 然后我通过以下方式使用它: 尽管此方法运行良好,但我想知道: 是否有更好的方法来实现这一目标? 问题答案: 您的基本方法看起来不错。我将代码结构如下: 如果你不希望在

  • 问题内容: 这就是我逐行处理文件的方式。但是,在这种情况下,我想在每次迭代中向处理器发送 两 行文本。(我正在处理的文本文件实际上在两行上存储了一条记录,因此每次都向处理器发送一条记录。) 用Java做到这一点的最佳方法是什么? 问题答案: 为什么不读两行呢? 假设您可以依靠输入文件中包含完整的2行数据集。

  • 问题内容: 我有mongodb和NodeJs。通过mongoosejs完成连接。 开发Ajax Infinity滚动的最佳方法是什么?我应该使用极限和偏移量吗? 问题答案: 当您对数据集进行分页时,“跳过并限制”方法不是很有效。它实际上是Shlemiel Painter的算法 。 范围查询效率更高(当索引支持时)。例如,假设您正在显示推文。您的页面大小是20,您在第1000页上,并且想要加载第10