Eigentlich würde man keine deiner Versionen benutzen, dass würde man über ein try-except lösen. Nach dem Test und vor dem Öffnen könnte die Datei immerhin gelöscht werden.
Edit: Entweder hast du nachbearbeitet, oder ich habe deinen restlichen Text übersehen:
Um Geschwindigkeit solltest man sich erstmal keine Gedanken machen. Ob nun ein open oder zwei ist relativ egal.
Wie du deine Bedingungen bei if gestaltes, ob mit not oder ohne, ist relativ egal. Mit einer einfachen Negation sollte jeder zurecht kommen.
built-ins solltest generell nicht überschrieben werden. Nur weil sie momentan nicht gebraucht werden, heißt es nicht, dass sie später im Code vielleicht doch nützlich sind. Außerdem erschwerst du damit anderen das Lesen deines Codes.
Beim Iterieren solltest du den Namen so wählen, dass er etwas über die Bedeutung aussagt. Da ist "file_" ein äußerst schlechter Name. Bennene es lieber danach, was sich in der Datei befindet, oder was damit gemacht wird. Das gilt für alle Namen. Btw.: Der Iterator ist nicht der Name (linke Seite der for-Schleife), sondern das "Ding" welches über die Werte iteriert (rechte Seite). Was das "i" angeht, gibt es sicher tausend Meinungen. Für einfache Indizes nutze ich "i", viele andere werden "index" schreiben. Das mit den Anfangsbuchstaben ist an sich eine ganz schlechte Idee, dort gilt wieder die Namenswahl nach Bedeutung.
Das Leben ist wie ein Tennisball.