Tengo algún código heredado con una función heredada que toma un nombre de archivo como argumento y procesa el contenido del archivo. Un facsímil de trabajo del código está debajo.StringIO y compatibilidad con la instrucción 'with' (administrador de contexto)
Lo que quiero hacer no es escribir en el disco con algún contenido que genere para usar esta función heredada, así que pensé que podría usar StringIO
para crear un objeto en lugar del nombre físico. Sin embargo, esto no funciona, como puedes ver a continuación.
Pensé que StringIO
era el camino a seguir con esto. ¿Alguien puede decirme si hay una forma de usar esta función heredada y pasarle algo en el argumento de que no es un archivo en el disco pero que puede ser tratado como tal por la función heredada? La función heredada tiene el administrador de contexto with
trabajando en el valor del parámetro filename
.
La única cosa que me encontré en Google era: http://bugs.python.org/issue1286, pero eso no me ayuda ...
Código
from pprint import pprint
import StringIO
# Legacy Function
def processFile(filename):
with open(filename, 'r') as fh:
return fh.readlines()
# This works
print 'This is the output of FileOnDisk.txt'
pprint(processFile('c:/temp/FileOnDisk.txt'))
print
# This fails
plink_data = StringIO.StringIO('StringIO data.')
print 'This is the error.'
pprint(processFile(plink_data))
salida
Este es el salida en FileOnDisk.txt
:
['This file is on disk.\n']
Este es el error:
Traceback (most recent call last):
File "C:\temp\test.py", line 20, in <module>
pprint(processFile(plink_data))
File "C:\temp\test.py", line 6, in processFile
with open(filename, 'r') as fh:
TypeError: coercing to Unicode: need string or buffer, instance found
usted no puede una instancia Stringio –