我有一些带有遗留函数的遗留代码,该函数将文件名作为参数并处理文件内容。代码的工作传真如下。
我想要做的不是必须将我生成的一些内容写入磁盘才能使用这个遗留功能,所以我虽然可以StringIO
用来创建一个对象来代替物理文件名。但是,这不起作用,如下所示。
我认为StringIO
这是解决这个问题的方法。谁能告诉我是否有办法使用这个遗留函数并在参数中传递一些不是磁盘上的文件但可以被遗留函数处理的东西?遗留函数确实让with
上下文管理器对filename
参数值进行处理。
我在谷歌遇到的一件事是:http ://bugs.python.org/issue1286 ,但这对我没有帮助......
代码
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))
输出
这是输出FileOnDisk.txt
:
['This file is on disk.\n']
这是错误:
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