如何用Python判断一个文件是否被占用?非常实用!

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

今天有同学问,用os模块的access()能否判断一个文件是否被占用?直觉上,这是行不通的,因为access()返回的是文件的读写属性。为了确认这一点,我简单测试了一下。

>>> import os
>>> fn = r'D:\temp\csdn\t.py' # 测试用的文件
>>> os.access(fn, os.F_OK) # 文件是否存在
True
>>> os.access(fn, os.R_OK) # 文件是否可读
True
>>> os.access(fn, os.W_OK) # 文件是否可写
True
>>> os.access(fn, os.X_OK) # 文件是否可执行
True
>>> fp = open(fn, 'a+') # 以追加写的方式打开文件
>>> os.access(fn, os.F_OK) # 文件当然还在
True
>>> os.access(fn, os.R_OK) # 文件依然可读
True
>>> os.access(fn, os.W_OK) # 文件依然可写
True
>>> os.access(fn, os.X_OK) # 文件依然执行
True
>>> fp.close()

可见,os.access()返回的是文件读写属性,与文件是否被占用没有半毛钱关系。

后来,群里有同学建议说,不妨用try尝试着open文件,如果成功,表示文件没有被占用,如果抛出异常,则表示文件被占用。果真如此吗?还是用代码验证一下吧。

>>> fp1 = open(fn, 'a+')
>>> fp2 = open(fn, 'a+')
>>> fp1.close()
>>> fp2.close()

结果表明,对同一个文件以写的方式打开多次,系统并没有抛出异常。为什么会这样呢?究其原因,是因为文件被打开和文件被占用是两个完全不同的问题。顺便提醒一下,做上面的测试时,不要使用’w’的方式,否则文件内容会被清空。

那么,究竟应该如何用Python判断一个文件是否被占用呢?这个问题还是要回归到操作系统层面来解决,也就是依赖win32api模块。

PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取

python免费学习资料以及群交流解答点击即可加入

>>> import win32file
>>> def is_used(file_name):
	try:
		vHandle = win32file.CreateFile(file_name, win32file.GENERIC_READ, 0, None, win32file.OPEN_EXISTING, win32file.FILE_ATTRIBUTE_NORMAL, None)
		return int(vHandle) == win32file.INVALID_HANDLE_VALUE
	except:
		return True
	finally:
		try:
			win32file.CloseHandle(vHandle)
		except:
			pass
		
>>> fn = r'D:\temp\csdn\t.py'
>>> is_used(fn)
False
>>> fp = open(fn, 'a+')
>>> is_used(fn)
True
>>> fp.close()
>>> is_used(fn)
False

简单验证了一下,函数is_used()基本可用。

 

LInux 系统编程(笔记一) 文件的使用 文件的写入与创建 open: /* #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode); int creat 阅读详情

相关推荐

c++文件的打开、读写和关闭。缓冲区的使用和控制。

在C++中,文件的打开、读写和关闭通常使用标准库中的文件流对象(如std::ifstream用于输入文件,std::ofstream用于输出文件)来完成。在上面的示例中,我们首先创建了一个std::ofstream对象来写入文件,然后创建了一个std::ifstream对象来读取文件。在大多数情况下,当std::ifstream或std::ofstream对象超出其作用域或被销毁时,它们的析构函数会自动关闭文件。std::ios::ate:打开文件后立即定位到文件末尾。

Aaron的博客 2317

Python 判断文件是否存在,存在则删除

# filepath为文件路径 import os # 判断文件是否存在 if (os.path.exists(filepath)) : #存在,则删除文件 os.remove(filepath)

桃子小迷妹 9227

c++:文件操作1 文件的打开

在程序中,要使用一个文件,先要打开文件后才能读写,读写完后要关闭。创建一个文件也要先执行打开(open)操作,然后才能往文件中写入数据。C++ 文件流类有相应的成员函数来实现打开、读、写、关闭等文件操作。 C++ 标准类库中有三个类可以用于文件操作,它们统称为文件流类。这三个类是: ifstream:用于从文件中读取数据。 ofstream:用于向文件中写人数据。 fstream:既可用...

m0_37957160的博客 2979

C文件操作

13.3 文件的打开与关闭 文件在进行读写操作之前要先打开,使用完毕要关闭。所谓打开文件,实际上是建立文件的各种有关信息,并使文件指针指向该文件,以便进行其它操作。关闭文件则断开指针与文件之间的联系,也就禁止再对该文件进行操作。 在C语言中,文件操作都是由库函数来完成的。在本章内将介绍主要的文件操作函数。 13.3.1 文件的打开(fopen函数) fopen函数用来打开一个文件,其调用的一般形式

Sk123的专栏 1615

python判断文件是否占用_如何用Python判断一个文件是否占用?非常实用

今天有同学问,用os模块的access()能否判断一个文件是否占用?直觉上,这是行不通的,因为access()返回的是文件的读写属性。为了确认这一点,我简单测试了一下。>>> import os>>> fn = r'D:\temp\csdn\t.py' # 测试用的文件>>> os.access(fn, os.F_OK) # 文件是否存在Tr...

weixin_39611820的博客 156

如何用Python判断一个文件是否占用

今天有同学问,用os模块的access()能否判断一个文件是否占用?直觉上,这是行不通的,因为access()返回的是文件的读写属性。后来,群里有同学建议说,不妨用try尝试着open文件,如果成功,表示文件没有被占用,如果抛出异常,则表示文件占用。果真如此吗?还是用代码验证一下吧。

Python作业辅导员 - 天元浪子 1万+

Python判断文件是否存在

  判断文件是否存在主要有两种方法: import os os.path.exists('xxx/xxx/filename') # True/False   以上方法中入参的路径可以是文件路径也可以是文件夹路径,所以可以用于判断文件以及文件是否存在。 但是有一种特殊的情况是可能入参传的是一个文件夹路径,但是文件夹路径的上一层有个相同的文件,例如/usr/local/testfile这是一个文件...

KLordy的博客 5万+

python判断文件是否占用_使用Python判断一个文件是否占用的方法教程

今天有同学问,用os模块的access()能否判断一个文件是否占用?直觉上,这是行不通的,因为access()返回的是文件的读写属性。为了确认这一点,我简单测试了一下。>>> import os>>> fn = r"D:empcsdn.py" # 测试用的文件>>> os.access(fn, os.F_OK) # 文件是否存在True&gt...

weixin_34308696的博客 428

python怎么判断文件是否占用_如何通过python检查文件是否占用

一、思路1、通过window的aip函数CreateFile()函数获得文件句柄2、检测在获得句柄的时候是否报错“文件占用无法打开”3、如果没有报错返回文件句柄,说明文件没有被占用;如果报错说明文件占用二、需importimport win32file和 from ctypes import windll两个库三、代码#-*- coding: utf-8 -*-from ctypes impo...

weixin_42393127的博客 1445

通过python 检查文件是否占用

一、思路 1、通过window的aip函数CreateFile()函数获得文件句柄 2、检测在获得句柄的时候是否报错“文件占用无法打开” 3、如果没有报错返回文件句柄,说明文件没有被占用;如果报错说明文件占用 二、需import import win32file和 from ctypes import windll 两个库 三、代码 #-*- coding: utf-8...

storm_spirit的博客 4988

python怎么判断文件是否占用_Python用access判断文件是否占用的实例方法

有的小伙伴想知道用access()函数可以判断一个文件占用吗?理论上来说是不行的,access()返回的是文件的读写属性。为了让小伙伴们信服,小编进行了简单的测试。>>> import os>>> fn = r'D:\temp\csdn\t.py' # 测试用的文件>>> os.access(fn, os.F_OK) # 文件是否存在True...

weixin_29668665的博客 141

python怎么判断一个文件是否存在-python判断文件是否存在的方法

python如何判断文件是否存在通常在读写文件之前,需要判断文件或目录是否存在,不然某些处理方法可能会使程序出错。所以最好在做任何操作之前,先判断文件是否存在。python中如何判断文件是否存在?判断文件是否存在可使用os模块, 使用Try语句, 使用pathlib模块。这里将介绍三种判断文件文件是否存在的方法,分别使用os模块、Try语句、pathlib模块。1.使用os模块os模块中的os...

weixin_37988176的博客 1733

python怎么判断一个文件是否存在-利用Python如何判断一个文件是否存在

通常在读写文件之前,需要判断文件或目录是否存在,不然某些处理方法可能会使程序出错。所以最好在做任何操作之前,先判断文件是否存在。这里将介绍三种判断文件文件是否存在的方法,分别使用os模块、Try语句、pathlib模块。1.使用os模块os模块中的os.path.exists()方法用于检验文件是否存在。判断文件是否存在import osos.path.exists(test_file.txt...

weixin_37988176的博客 822

Python】检查文件是否处于占用状态

写在前面 如何用 Python 编写代码判断一个文件是否处于占用状态? 思路 调用 win32 api 的 CreateFile 函数来获取文件句柄 判断上一步获取的文件句柄是否有效 若无效,则说明文件正被占用;反之,就没有占用 代码 import win32file def is_file_using(file_name): try: vHandle = win32file.CreateFile(file_name, win32file.GENERIC_READ, 0, N

XavierJ的博客 3163

python怎么判断一个文件是否存在-python判断文件是否存在

在操作文件前,检查文件是否存在也是一个良好的编程习惯。通常来说,有三种常见方式来判断文件夹或文件是否存在,分别是os模块,try语句和pathlib模块。python学习网,大量的免费python视频教程,欢迎在线学习!os模块os模块中的os.path.exists(path)可以检测文件文件是否存在,path为文件/文件夹的名字/绝对路径。返回结果为True/Falseprint os.p...

weixin_37988176的博客 1070

python 判断文件是否存在,是否为空

1. 判断文件是否为空 os.path.getsize()返回文件的字节数,如果为 0,则代表空。 import os file = "/home/abc/a.txt" if not os.path.getsize(file): os.remove(file) 2. 判断文件 / 文件是否存在 os.path.exists()方法用于检验文件 / 文件是否存在。 import os path = "/home/abc/test_dir" file = "/home/abc/..

给我一点温度 1万+

python os.access_Python用access判断文件是否占用的实例方法

有的小伙伴想知道用access()函数可以判断一个文件占用吗?理论上来说是不行的,access()返回的是文件的读写属性。为了让小伙伴们信服,小编进行了简单的测试。>>> import os>>> fn = r'D:\temp\csdn\t.py' # 测试用的文件>>> os.access(fn, os.F_OK) # 文件是否存在True...

weixin_39956612的博客 288
上一篇: 推荐一款最强Python自动化神器!不用写一行代码!
下一篇: Python十大装B语法!你会几种?
pythonlaodi
博客等级 码龄6年 286粉丝 244原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值