Python写文件为空

时间:2015-03-27 12:52:33

标签: python

我正在尝试编写脚本以将Intel HEX文件转换为Verilog mem格式。 我可以打印我要保存的字符串OK(例如,读取和解析位工作)但是当我尝试写入文件时,没有任何内容出现:(

ihexf = open("test.hex","r")
vmemf = open("test.mem","w")

for line in ihexf:
    rlen_s = line[1:3]
    addr_s = line[3:7]
    rtyp_s = line[7:9]
    rlen = int(rlen_s, 16)
    addr = int(addr_s, 16)
    rtyp = int(rtyp_s, 16)
#    print(rlen_s,addr_s,rtyp_s)

    if rtyp == 0:
#        print('@'+addr_s)
        vmemf.write('@'+addr_s+'\n')
        for i in range (0, rlen):
            laddr = addr + i
            val_s = line[9+i*2:9+i*2+2]
            val = int(val_s, 16)
#            print(val_s)
            vmemf.write(val_s+'\n')            
#        print("")
    else:
        print("------- End Of File ------")
ihexf.close()
vmemf.close()

我的test.hex看起来像

:20000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FF000000FF000000FF555540FF0A
:20000800155540FF055540FF015540FF005540FF001540FF000540FF000140FF000040FF56
:20001000000040FF000140FF000540FF001540FF005540FF015540FF055540FF155540FF4E
:00000001FF

我做错了什么线索?

2 个答案:

答案 0 :(得分:0)

确保您已关闭文件,非常重要的是您将文件指针重新定位到文件的开头并开始阅读块。

ihexf.seek(0,0)

答案 1 :(得分:0)

好的 - 我知道发生了什么(我想!)

现有代码适用于Linux但不适用于Windows。 在Windows上,我在脚本完成后看到以下内容:

@0000
@0008
@0010
@0018
------- End Of File ------
Traceback (most recent call last):
File "C:\Users\Nigel\SkyDrive\Files\python\intexhex2v.py", line 8, in <module>
rlen = int(rlen_s, 16)
ValueError: invalid literal for int() with base 16: ''`

在文件读取结束时,事情看起来很糟糕。

在文件结束打印后添加break修复了所有内容

由于