如何使用struct.pack作为字符串列表

时间:2015-02-18 21:35:45

标签: string python-3.x numpy

我想写一个字符串列表到二进制文件。假设我有一个字符串列表mylist?假设列表中的项目最后有一个'\t',除了最后一个项目最后有一个'\n'(帮助我恢复数据)。示例:['test\t', 'test1\t', 'test2\t', 'testl\n']

对于numpy ndarray,我发现以下脚本有效(从numpy to r converter获取):

binfile = open('myfile.bin','wb')
for i in range(mynpdata.shape[1]):
   binfile.write(struct.pack('%id' % mynpdata.shape[0], *mynpdata[:,i]))
binfile.close()
  1. 如果变量前面有binfile.write*会自动解析所有数据吗(例如上面的*mynpdata[:,i]示例中)?这是否会以相同的方式使用整数列表(例如*myIntList)?

  2. 如何使用字符串列表执行相同的操作?

  3. 我在一个字符串上尝试使用(我在网上找到的地方):

    oneString = 'test'
    oneStringByte = bytes(oneString,'utf-8')
    struct.pack('I%ds' % (len(oneString),), len(oneString), oneString)
    

    但我无法理解为什么上面的% 'I%ds'取代(len(oneString),)而非len(oneString)取代ndarray示例,为什么len(oneString)oneString都通过了?

    有人可以帮我写一个字符串列表(如果需要,假设它被写入我写出ndarray的同一个二进制文件中)?

1 个答案:

答案 0 :(得分:1)

不需要struct。只需连接字符串并使用指定或假定的文本编码对它们进行编码,以便将它们转换为字节。

''.join(L).encode('utf-8')