擅长:python、mysql、java
<p>您可以简单地将数据变量写回原处,这样您就可以成功地进行往返旅行了。</p>
<p>但看起来您打算将文件作为一个由<code>0</code>和<code>1</code>字符组成的字符串来处理。这没什么问题(虽然很少有必要),但是您的代码采用了一种非常迂回的方式将数据转换为该表单。与其构建一个怪物整数并将其转换为位字符串,不如一次只对一个字节执行此操作:</p>
<pre><code>data = file.read()
data_2 = "".join( bin(ord(c))[2:] for c in data )
</code></pre>
<p><code>data_2</code>现在是一个0和1的序列。(在一个字符串中,与您拥有的字符串相同;但是如果您要进行更改,我会将位字符串保留在列表中)。反向转换也最好逐字节完成:</p>
<pre><code>newdata = "".join(chr(int(byte, 8)) for byte in grouper(long_bitstring, 8, "0"))
</code></pre>
<p>这使用<a href="http://docs.python.org/2.7/library/itertools.html#recipes" rel="nofollow">^{<cd5>} documentation</a>中的<code>grouper</code>配方。</p>
<pre><code>from itertools import izip_longest
def grouper(iterable, n, fillvalue=None):
"Collect data into fixed-length chunks or blocks"
# grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx
args = [iter(iterable)] * n
return izip_longest(fillvalue=fillvalue, *args)
</code></pre>