问题描述
在 Windows 操作系统上,在对文件执行某些操作之前,我需要知道该文件是否已被其他进程使用。经过对所有其他类似问题的认真研究后,我无法找到可行的解决方案。
os.rename(my_file.csv,my_file.csv)
仍然可以使用,即使我使用...记事本打开了文件。
psutil
...花费了太多时间,并且无法正常工作(在nt.path
中找不到我的文件路径:
for proc in psutil.process_iter():
try:
flist = proc.open_files()
if flist:
for nt in flist:
if my_file_path == nt.path:
print("it's here")
except psutil.NoSuchProcess as err:
print(err)
还有其他解决方案吗?
更新1
我必须对此文件执行2个操作:1.检查文件名是否对应于模式; 2.通过SFTP复制。
UPDATE 2 +解决方案
由于@Eryk Sun,我发现记事本“将内容读入内存,然后关闭句柄”。用Word打开文件后,os.rename
和psutil
就像(py)符一样工作。
解决方法
如果您使用的程序通过导入来打开文件(例如,Excel会执行该操作),则意味着该程序无需手动操作即可以可读形式转换您的数据然后在实际文件上。如果您从那里保存文件,它会以程序自己的格式保存文件或将文件导出(并转换)回去。
您想对文件进行什么操作?也许您可以简单地复制文件?