回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我试着运行这个:</p>
<pre><code>def ReadWord(fid,fmt,Addr):
fid.seek(Addr)
s = fid.readline(2)
s = unpack(fmt + 'h', s)
if(type(s) == tuple):
return s[0]
else:
return s
</code></pre>
<p>有:</p>
^{pr2}$
<p>但是,Python返回:</p>
<blockquote>
<p>struct.error: unpack requires a string argument of length 4</p>
</blockquote>
<p>根据python <code>struct.unpack</code><a href="https://docs.python.org/2/library/struct.html#struct.unpack" rel="nofollow">documentation</a>:</p>
<blockquote>
<p>The string must contain exactly the amount of data required by the format (len(string) must equal calcsize(fmt)).</p>
</blockquote>
<p>因此,如果字符串的长度是2,<code>fmt+'h'</code>的calcsize也是2,那么为什么python会说“unpack需要一个字符串参数length<strong>4</strong>”??在</p>
<p><strong>编辑:</strong></p>
<p>谢谢你的回答。以下是完整代码:</p>
<p><a href="http://qtwork.tudelft.nl/gitdata/users/guen/qtlabanalysis/analysis_modules/general/lecroy.py" rel="nofollow">http://qtwork.tudelft.nl/gitdata/users/guen/qtlabanalysis/analysis_modules/general/lecroy.py</a></p>
<p>因此,正如您在<code>read_timetrace</code>函数中看到的,在<code>if...else</code>语句中,<code>fmt</code>被设置为<code>'<'</code>或{<cd6>}。打印出来证实了这一点。在</p>
<p><strong>但是</strong>你也应该知道我在windowsx64上工作(为了工作)。在</p>
<p><strong>编辑2</strong></p>
<p>这是完整的回溯,抱歉弄错了。在</p>
<pre><code>Traceback (most recent call last):
File "C:\Users\maxime.vast\Desktop\Test Campaign Template\Test Suite\Include\readLecroyTRCFile.py", line 139, in <module>
read_timetrace("C:\Users\maxime.vast\Desktop\Test Campaign Template\Test Suite\Traces\KL.ES.001.001.trc")
File "C:\Users\maxime.vast\Desktop\Test Campaign Template\Test Suite\Include\readLecroyTRCFile.py", line 60, in read_timetrace
WAVE_ARRAY_1 = ReadLong(fid, fmt, aWAVE_ARRAY_1)
File "C:\Users\maxime.vast\Desktop\Test Campaign Template\Test Suite\Include\readLecroyTRCFile.py", line 100, in ReadLong
s = unpack(fmt + 'l', s)
struct.error: unpack requires a string argument of length 4
[Finished in 0.2s]
</code></pre>
<p><strong>编辑3:</strong></p>
<p>我将<code>readline</code>替换为<code>read</code>,并添加:</p>
<pre><code>print "len(s) ", len(s)
print "len(fmt) ", len(fmt)
print "calcsize(fmt) ", calcsize(fmt)
print "calcsize(fmt + 'h') ", calcsize(fmt + 'h')
print "fmt ", fmt
</code></pre>
<p>到<code>ReadLong</code>函数。在</p>
<p>这是新的回溯:</p>
<pre><code>len(s) 4
len(fmt) 1
calcsize(fmt) 0
calcsize(fmt + 'h') 2
fmt <
len(s) 4
len(fmt) 1
calcsize(fmt) 0
calcsize(fmt + 'h') 2
fmt <
len(s) 4
len(fmt) 1
calcsize(fmt) 0
calcsize(fmt + 'h') 2
fmt <
len(s) 1
len(fmt) 1
calcsize(fmt) 0
calcsize(fmt + 'h') 2
fmt <
Traceback (most recent call last):
File "C:\Users\maxime.vast\Desktop\Test Campaign Template\Test Suite\Include\readLecroyTRCFile.py", line 143, in <module>
read_timetrace("C:\Users\maxime.vast\Desktop\Test Campaign Template\Test Suite\Traces\KL.ES.001.001.trc")
File "C:\Users\maxime.vast\Desktop\Test Campaign Template\Test Suite\Include\readLecroyTRCFile.py", line 60, in read_timetrace
WAVE_ARRAY_1 = ReadLong(fid, fmt, aWAVE_ARRAY_1)
File "C:\Users\maxime.vast\Desktop\Test Campaign Template\Test Suite\Include\readLecroyTRCFile.py", line 104, in ReadLong
s = unpack(fmt + 'l', s)
struct.error: unpack requires a string argument of length 4
[Finished in 0.2s]
</code></pre>