【问题标题】:how use struct.pack for list of strings如何使用 struct.pack 获取字符串列表
【发布时间】:2015-02-18 21:35:44
【问题描述】:

我想将字符串列表写入二进制文件。假设我有一个字符串列表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. 如果变量前面有*(例如上面的*mynpdata[:,i] 示例),binfile.write 是否会自动解析所有数据?这是否可以以相同的方式处理整数列表(例如*myIntList)?

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

我在单个字符串上使用(我在网上某处找到)尝试了它:

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的同一个二进制文件)?

【问题讨论】:

    标签: string python-3.x numpy


    【解决方案1】:

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

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

    【讨论】:

    • 您知道加入是否有大小限制吗?假设我的字符串列表有 10,000 个项目,其中每个字符串通常是 4-40 个字符(我使用的是 Python 3.4)?
    • 剩下多少进程空间。
    猜你喜欢
    • 2013-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-24
    • 2012-05-03
    • 2017-05-10
    • 2019-02-21
    • 2011-06-09
    相关资源
    最近更新 更多