Hailiang Zhang
Hailiang Zhang

Reputation: 18950

How to check whether a file is_open and the open_status in python

Is there any python functions such as:

filename = "a.txt"
if is_open(filename) and open_status(filename)=='w':
   print filename," is open for writing"

Upvotes: 9

Views: 23201

Answers (5)

Sangram Mohanty
Sangram Mohanty

Reputation: 42

There is a attribute to check the open status or mode of a file.

filename = open('open.txt','r')
print(filename.mode)

Python has an inbuilt attribute called 'mode'. Above code will return 'r'. Similarly if you open a file in 'w' mode above code will return 'w'

You can also check if a file is open or closed

print(filename.closed)

This will return 'FALSE' as the file is in open state.

filename.closed
print(filename.closed)

This will return 'TRUE' because the file is now in close state.

Thank you

Upvotes: 2

PilouPili
PilouPili

Reputation: 2699

I think the best way to do that is to try.

def is_already_opened_in_write_mode(filename)
     if os.path.exists(filename):
         try:
             f = open(filename, 'a')
             f.close()
         except IOError:
             return True
     return False

Upvotes: 1

Toni Ruža
Toni Ruža

Reputation: 7512

Here is an is_open solution for windows using ctypes:

from ctypes import cdll

_sopen = cdll.msvcrt._sopen
_close = cdll.msvcrt._close
_SH_DENYRW = 0x10

def is_open(filename):
    if not os.access(filename, os.F_OK):
        return False # file doesn't exist
    h = _sopen(filename, 0, _SH_DENYRW, 0)
    if h == 3:
        _close(h)
        return False # file is not opened by anyone else
    return True # file is already open

Upvotes: 3

daniel kullmann
daniel kullmann

Reputation: 14023

I don't think there is an easy way to do what you want, but a start could be to redefine open() and add your own managing code. That said, why do you want to do that?

Upvotes: -1

Ben Hoffstein
Ben Hoffstein

Reputation: 103385

This is not quite what you want, since it just tests whether a given file is write-able. But in case it's helpful:

import os

filename = "a.txt"
if not os.access(filename, os.W_OK):
    print "Write access not permitted on %s" % filename

(I'm not aware of any platform-independent way to do what you ask)

Upvotes: 7

Related Questions