将列表转换为字符串,然后再转换回lis

2024-04-27 02:42:26 发布

您现在位置:Python中文网/ 问答频道 /正文

背景
我正在将数据转换为二进制,因为服务器端需要二进制类型。

问题:
如何将数字列表转换为字符串,然后重新构造该列表?

文件内容:

1 1 1
1 2 1
1 3 1
1 4 1
1 5 1
1 6 1
1 7 1
1 8 1
1 9 1
1 10 1
1 11 1
1 12 1
1 13 1
1 14 1
1 15 1


在客户端:我正在读取整个文件,并将每个值附加到列表中。然后列表被转换成数组,数组在数据发送到服务器之前被转换成字符串。

在服务器:我正在将字符串映射回值列表。然后使用grouper将该列表转换为元组(x, y, w)的列表。然后(x, y, z)被送入Point,新构造的对象被追加到一个列表中。

注意我不能使用bytearray,因为这是一个人工数据样本,我的数字将比byte所能代表的大得多。

代码:

^{pr2}$


数据发送到服务器


接收的数据

    myList = list(map(ord, list(L)))
    myList = list(grouper(myList, 3))
    s = len(myList)
    for i in range (0, s):
        x, y, w = myList[i]
        obj = Point(x, y, w)
        listOfObjects.append(obj)

预期输出:

1      <---- first line in file
1 
1
-------- 
1      <--- sixth line in file
7
1

实际输出:

1
0
1
1
0
4

我不知道我做错了什么。。我4天前问过this问题。"How to convert .txt file to a binary object"。在

服务器指定应该发送的数据是:binary: A byte array。这里我不能有一个简单的bytearray,因为python bytearray被限制为容纳数字0-256,而且我的文件中表示的数字要大得多。在

我应该用什么代替呢?至于上面的部分,它的清晰数据是混合的,我没有在服务器端正确地解析,或者我在代码中做了一些错误的事情,我看不到它。。。在


编辑! 我尝试发送列表而不是字符串,但服务器不接受。在

TypeError: write() argument 1 must be string or buffer, not list.

提前谢谢!在


Tags: 文件数据字符串in服务器列表服务器端二进制
1条回答
网友
1楼 · 发布于 2024-04-27 02:42:26

在您的代码中:

L = array.array('h', myList).tostring()

您正在创建一个压缩为两字节整数的bytestring。在服务器端,然后使用list(L)来生成一个列表,它使用L的每个元素来生成一个列表,但是在这种情况下,它没有保留2字节的打包,因为它将bytestring中的每个元素看作一个字节,例如:

^{pr2}$

因此,从源数据重建数组以获取所发送的内容。在

>>> array.array('h', s)
array('h', [1234, 5678]) # better!

还请注意,在您的注释中,您说范围最多为1000000“-h”格式是一个2字节的有符号整数,因此您需要使用“l”来表示有符号的long,而不是充分地表示值。。。(有关可用选项,请参阅array documentation中的类型代码)

to_send = array.array('l', [1000000, 12345]).tostring()
recieved = array.array('l', to_send)

相关问题 更多 >