I think it would be slightly better to attempt to do the unlink and catch the exception that gets thrown when the file doesn't exist, rather than checking beforehand. That results in less filesystem access, and fewer race conditions due to the possibility of `zip_file` coming into existence just after the `os.access()` call. You could wrap the pattern in a function named something like `safe_unlink` or `rm_f`.