![](/img/trans.png)
[英]How can i write a byte object file from integers of different length of bytes
[英]How to write bytes to csv file as byte strings not integers?
有一个字节对象列表(每个字节是4个字节),它们作为一个代码的输出返回,我想使用CSV
模块将其保存到.csv
文件中,并稍后在另一个脚本中读取。 这是我从python的官方文档中学到的代码:
import struct
import csv
k = 0x100000
rng = range(0, k)
x1 = [b''] * k
x = 0xffffffff
for i in rng:
x1[i] = struct.pack("<L", x)
x -= 1
print(x1[0]) # b'\xff\xff\xff\xff'
List = x1
with open("test.csv", 'w', newline='') as rF:
wr = csv.writer(rF, dialect='excel')
for i in List:
wr.writerow(i)
当使用记事本查看创建的test.csv
,而不是一列字节字符串,我看到了4列8位整数。 test.csv
第一行几行是:
255,255,255,255
254,255,255,255
253,255,255,255
252,255,255,255
251,255,255,255
250,255,255,255
.
.
.
我正在做错什么事情了? 有没有一种方法来获取带有一列字节字符串的csv文件? 例如:
b'\xff\xff\xff\xff'
b'\xfe\xff\xff\xff'
b'\xfd\xff\xff\xff'
.
.
.
其实我不在乎我的字节如何存储在csv中。 我只是想在另一个脚本中使用csv.reader
将它们放回到字节列表中,并希望加载过程尽可能快。
这样就可以了。
import pandas as pd
import struct
k = 0x100000
rng = range(0, k)
x1 = [b''] * k
x = 0xffffffff
for i in rng:
x1[i] = struct.pack("<L", x)
x -= 1
df = pd.DataFrame()
df["data"] = x1
df.to_csv("test.csv", index=False, header=None)
这将以字节为单位输出文件。 样品输出
b'\xff\xff\xff\xff'
b'\xfe\xff\xff\xff'
b'\xfd\xff\xff\xff'
b'\xfc\xff\xff\xff'
b'\xfb\xff\xff\xff'
您可以使用pandas而不是csv来回读文件。
df = pd.read_csv("test.csv")
替代
with open("test.csv", "wb") as f:
for i in x1:
f.write(i)
f.write('\n'.encode('utf-8'))
# Reading file
y = []
with open("test.csv", "rb") as f:
for i in f.readlines():
y.append(i.replace('\n'.encode('utf-8'), "".encode("utf-8")))
pprint(y[:10])
产量
[b'\xff\xff\xff\xff',
b'\xfe\xff\xff\xff',
b'\xfd\xff\xff\xff',
b'\xfc\xff\xff\xff',
b'\xfb\xff\xff\xff',
b'\xfa\xff\xff\xff',
b'\xf9\xff\xff\xff',
b'\xf8\xff\xff\xff',
b'\xf7\xff\xff\xff',
b'\xf6\xff\xff\xff']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.