Solución:
Si todo lo que te importa es el proceso actual, una forma sencilla es utilizar el atributo de objeto de archivo “cerrado”
f = open('file.py')
if f.closed:
print 'file is closed'
¡Esto no detectará si el archivo está abierto por otros procesos!
fuente: http://docs.python.org/2.4/lib/bltin-file-objects.html
Supongo que está escribiendo en el archivo, luego ciérrelo (para que el usuario pueda abrirlo en Excel) y luego, antes de volver a abrirlo para operaciones de adición / escritura, desea verificar que el archivo no esté todavía abrir en Excel?
Así es como puedes hacer eso:
while True: # repeat until the try statement succeeds
try:
myfile = open("myfile.csv", "r+") # or "a+", whatever you need
break # exit the loop
except IOError:
input("Could not open file! Please close Excel. Press Enter to retry.")
# restart the loop
with myfile:
do_stuff()
Ninguno de los otros ejemplos proporcionados funcionaría para mí cuando se trata de este problema específico con Excel en Windows 10. La única otra opción que se me ocurrió fue intentar cambiar el nombre del archivo o directorio que contiene el archivo temporalmente, luego cambiarle el nombre.
import os
try:
os.rename('file.xls', 'tempfile.xls')
os.rename('tempfile.xls', 'file.xls')
except OSError:
print('File is still open.')