我正在处理一个问题,结果被墙卡住了
我有一组(可能很大)文本文件,我需要对其应用一系列过滤器和转换,并将其导出到其他地方。在
所以我大概有
def apply_filter_transformer(basepath = None, newpath = None, fts= None):
#because all the raw studies in basepath should not be modified, so I first cp all to newpath
for i in listdir(basepath):
file(path.join(newpath, i), "wb").writelines(file(path.join(basepath, i)).readlines())
for i in listdir(newpath):
fileobj = open(path.join(newpath, i), "r+")
for fcn in fts:
fileobj = fcn(fileobj)
if fileobj is not None:
fileobj.writelines(fileobj.readlines())
try:
fileobj.close()
except:
print i, "at", fcn
pass
def main():
apply_filter_transformer(path.join(pardir, pardir, "studies"),
path.abspath(path.join(pardir, pardir, "filtered_studies")),
[
#transformer_addMemo,
filter_executable,
transformer_identity,
filter_identity,
])
apply_filter_transformer中的fts是一个函数列表,它接受python文件对象并返回python文件对象。我遇到的问题是,当我想在一个文本对象中插入字符串时,我遇到了一个不具信息性的错误,整个上午都被卡住了。在
^{pr2}$这给了我
Traceback (most recent call last):
File "E:\mypy\reg_test\src\preprocessor\preprocessor.py", line 292, in <module>
main()
File "E:\mypy\reg_test\src\preprocessor\preprocessor.py", line 288, in main
filter_identity,
File "E:\mypy\reg_test\src\preprocessor\preprocessor.py", line 276, in apply_filter_transformer
fileobj.writelines(fileobj.readlines())
IOError: [Errno 0] Error
如果有人能给我更多关于错误的信息,我将非常感激。在
有一个方便的python模块可以修改或读取一组文件:fileinput
我不知道是什么导致了这个错误。但是,您正在将整个文件读入内存,这在您的情况下不是一个好主意,因为这些文件可能很大。使用fileinput可以轻松地替换文件。例如:
实际上不可能从您发布的代码中判断出导致错误的原因。问题可能出在您为转换函数所采用的协议中。在
我将简化代码:
我能保证
fcn
返回一个以原始文件模式打开的文件?它返回一个完全打开的文件?它返回一个文件?嗯,我不知道你似乎没有任何理由在你的进程中使用文件对象。既然要将整个文件读入内存,为什么不让转换函数接受并返回字符串呢?所以你的代码应该是这样的:
^{pr2}$除此之外,这会将程序的文件I/O部分与数据转换部分完全分离,这样一来,一个部分中的问题就不会影响到另一个部分。在
相关问题 更多 >
编程相关推荐