我有一个Python脚本,处理数据文件:写空字节的文件,而不是正确的字符串
out = open('result/process/'+name+'.res','w')
out.write("source,rssi,lqi,packetId,run,counter\n")
f = open('result/resultat0.res','r')
for ligne in [x for x in f if x != '']:
chaine = ligne.rstrip('\n')
tmp = chaine.split(',')
if (len(tmp) == 6):
out.write(','.join(tmp)+"\n")
f.close()
的完整源代码here
我使用这个脚本在多台计算机和行为不一样。 在第一台计算机上,使用python 2.6.6,结果就是我所期望的。 然而,在其他(python 2.6.6,3.3.2,2.7.5)文件对象的写入方法放置空字节,而不是在大多数处理期间我想要的值。我得到这个结果:
$ hexdump -C result/process/1.res
00000000 73 6f 75 72 63 65 2c 72 73 73 69 2c 6c 71 69 2c |source,rssi,lqi,|
00000010 70 61 63 6b 65 74 49 64 2c 72 75 6e 2c 63 6f 75 |packetId,run,cou|
00000020 6e 74 65 72 0a 00 00 00 00 00 00 00 00 00 00 00 |nter............|
00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
0003a130 00 00 00 00 00 00 00 00 00 00 31 33 2c 36 35 2c |..........13,65,|
0003a140 31 34 2c 38 2c 39 38 2c 31 33 31 34 32 0a 31 32 |14,8,98,13142.12|
0003a150 2c 34 37 2c 31 37 2c 38 2c 39 38 2c 31 33 31 34 |,47,17,8,98,1314|
0003a160 33 0a 33 2c 34 35 2c 31 38 2c 38 2c 39 38 2c 31 |3.3,45,18,8,98,1|
0003a170 33 31 34 34 0a 31 31 2c 38 2c 32 33 2c 38 2c 39 |3144.11,8,23,8,9|
0003a180 38 2c 31 33 31 34 35 0a 39 2c 32 30 2c 32 32 2c |8,13145.9,20,22,|
你有什么想法如何解决这个问题吗?
我查看了链接中的完整代码。你是Python和面向对象编程的新手?问题在于你使用全局变量并在各个地方打开文件,将文件句柄存储在字典中:这是非常难以理解的。你的代码拼命需要重构。 – MattH
一些一般的评论。你有没有试过调试器?在列表理解中添加一个打印语句以验证输出是否如预期的那样。不要使用'rstrip',尝试使用'strip()'去除所有行尾字符,包括尾随空格。 –
我尝试使用print-statement,输出是正确的行,而不是空字节。 – user2523255