Hace, con open () no funciona con python 2.6

Estoy tratando de usar “With open ()” con python 2.6 y está dando un error (error de syntax) mientras funciona bien con python 2.7.3. ¡Me estoy perdiendo algo o algo de importancia para hacer que mi progtwig funcione!

Cualquier ayuda sería apreciada.

Br

Mi código está aquí:

def compare_some_text_of_a_file(self, exportfileTransferFolder, exportfileCheckFilesFolder) : flag = 0 error = "" with open("check_files/"+exportfileCheckFilesFolder+".txt") as f1,open("transfer-out/"+exportfileTransferFolder) as f2: if f1.read().strip() in f2.read(): print "" else: flag = 1 error = exportfileCheckFilesFolder error = "Data of file " + error + " do not match with exported data\n" if flag == 1: raise AssertionError(error) 

La statement with open() es compatible con Python 2.6, debe tener un error diferente.

Consulte PEP 343 y la documentación de objetos de archivo de python para obtener más información.

Demostración rápida:

 Python 2.6.8 (unknown, Apr 19 2012, 01:24:00) [GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> with open('/tmp/test/a.txt') as f: ... print f.readline() ... foo >>> 

Sin embargo, está intentando usar la instrucción with con múltiples administradores de contexto, que solo se agregó en Python 2.7 :

Modificado en la versión 2.7: Soporte para múltiples expresiones de contexto.

Utilice declaraciones anidadas en lugar de 2.6:

 with open("check_files/"+exportfileCheckFilesFolder+".txt") as f1: with open("transfer-out/"+exportfileTransferFolder) as f2: # f1 and f2 are now both open. 

Es la statement “extendida” con múltiples expresiones de contexto lo que causa su problema.

En 2.6, en lugar de

 with open(...) as f1, open(...) as f2: do_stuff() 

Usted debe agregar un nivel de anidación y escribir

 with open(...) as f1: with open(...) as f2: do.stuff() 

El docu dice

Modificado en la versión 2.7: Soporte para múltiples expresiones de contexto.

La syntax with open() es compatible con Python 2.6. En Python 2.4 no es compatible y da un error de syntax. Si necesita apoyar PYthon 2.4, sugeriría algo como:

 def readfile(filename, mode='r'): f = open(filename, mode) try: for line in f: yield f except e: f.close() raise e f.close() for line in readfile(myfile): print line