2012-01-17 87 views
0

我使用Python解析xls文件,然后将该信息转换为SBML(XML的一个版本)。Python:将输出写入文本文件,但文本文件不包含整个字符串并随机截断?

from mod2sbml import Parser 

s = open('sbmltest3.mod', 'r').read() 
p = Parser() 
d = p.parse(s) 

outfile2 = open('sbmlconvert.xml', 'w') 
print >> outfile2, d.toSBML() 
outfile2.close() 

这是一个相当长的文件(> 3000行),当我中打开.xml,字符串被约1400个或3000行随机截断。但是,当我键入:print d.toSBML() 并将此字符串输出到控制台时,字符串不会被截断,并且我可以看到分析字符串的结尾。

这里有什么问题?

编辑:为了进一步解析问题,我用outfile2.close()关闭了代码,并试图在我的脚本中打印s并打印到控制台。这将返回截尾的sd字符串。但是,当我将确切的命令分别输入到解释器中时,两者都可以正确打印。任何人都知道这种差异是怎么回事?

+3

你忘了关闭文件。虽然这可能不是原因,但你应该真的这么做。此外,您可以使用'outfile2.write(d.toSBML())'而不是使用'print'。 – ThiefMaster 2012-01-17 02:48:25

+0

为什么你认为's'被截断了,特别是如果'd'似乎包含其全部内容? – 2012-01-17 03:04:11

+0

另外,如果您正在处理文件内的文本信息,则应使用“rt”和“wt”作为文件模式。 (如果文件不是文本,则为“rb”和“wb”) – jsbueno 2012-01-17 03:07:19

回答

0

试试这个:

from mod2sbml import Parser  
p = Parser()  

with open('sbmlconvert.xml', 'w') as of: 
    s = open('sbmltest3.mod', 'r').read()  
    d = p.parse(s) 
    of.write(d.toSBML())  
+0

同样的问题。这个问题实际上似乎是read()函数。 s显示为截断。 – 2012-01-17 08:54:47

+0

''of.close()'不需要,因为你正在使用'with'语句。 – 2012-01-17 18:54:05

相关问题