Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python文件大小与数组不同_Python_Binaryfiles - Fatal编程技术网

Python文件大小与数组不同

Python文件大小与数组不同,python,binaryfiles,Python,Binaryfiles,另一个python问题。。。我正在编写一个脚本,它扫描一系列文本文件,并计算文本中四联图的相对频率(请参阅)。此代码的目的是集成到自动替换密码解算器中 我的代码似乎在工作——它正确地扫描了所有的文本行,并进行了适当的计算。我遇到的问题是将数组保存到文件中,然后重新加载它。假设字母表为26个字符(A-Z),则四字图数组应为26^4=456976,因此生成的文件大小应为456976字节。然而,我的代码似乎创建了一个456972字节的文件,这个文件太小了4个字节。我的第一个想法是写字节的循环上的索引问

另一个python问题。。。我正在编写一个脚本,它扫描一系列文本文件,并计算文本中四联图的相对频率(请参阅)。此代码的目的是集成到自动替换密码解算器中

我的代码似乎在工作——它正确地扫描了所有的文本行,并进行了适当的计算。我遇到的问题是将数组保存到文件中,然后重新加载它。假设字母表为26个字符(A-Z),则四字图数组应为26^4=456976,因此生成的文件大小应为456976字节。然而,我的代码似乎创建了一个456972字节的文件,这个文件太小了4个字节。我的第一个想法是写字节的循环上的索引问题,但是注释掉的print语句告诉我循环似乎执行了正确的次数

谁能给我指一下正确的方向吗?谢谢

代码:

编辑:这是我用来计算文件长度的代码。。。也许错误就在这里?这就是我得到数据的地方。如果我循环到len(tetrastring),那么在加载数组时会出现索引错误

fp = open(tetrafile)
tetrastring = fp.read()
fp.close()

print(len(tetrastring))

该问题可能是由unicode字符偏离长度测量值引起的。unicode字符串上的len()函数提供组合字符后的代码点数量(例如“umlaut”和“O”,它们一起算作单个字符)。A也可以解释四字节的差异


发布代码中的
u'.join()
提示unicode问题可能是长度测量差异的根源。

文件中是否缺少任何内容?通过检查。4字节是一个非常小的差异,所以它只能是1个字符,真的。或者什么都没有。没有什么明显的-但很难说。。。因为像“aaaa”和“zzzz”这样的四字图在普通文本中几乎找不到,所以文件的开头和结尾都是一堆零。如果我在十六进制编辑器中查看该文件,那么它看起来是正确的,但我无法判断其中是否有小偏移量。我已经对读取输入并测试的循环进行了注释。它在这里工作:-rw-rw-r--1个用户456976 Dec 17 20:59 tetra.log。在Ubuntu 12.04.3中使用python 3.2.3运行此代码时,会生成一个456976字节的输出文件。也许你遇到问题的代码不是这样的?不。。。它也很好。。。它打印456976,但输出文件是以字节编码的所有数字,而不是unicode。我认为这一点都不相关。好吧,他不是以二进制模式打开文件。。。在你的第二个程序中尝试使用fp=open(tetrafile,“rb”)是的,他是:
fp=open(outfile,“wb”)
对不起,在验证长度的程序中,我还没有看到编辑。你可能是对的。如果问题是测量程序将事物误解为真正二进制的unicode,那么这个答案可能是正确的。不过,这或许应该更清楚一点。
fp = open(tetrafile)
tetrastring = fp.read()
fp.close()

print(len(tetrastring))