如何将字节作为字节字符串而不是整数写入csv文件?

2024-05-23 14:34:34 发布

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

有一个bytes对象的列表(每个是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的第一行是:

^{pr2}$

我到底做错了什么?有没有办法得到一个包含一列字节字符串的csv文件?例如:

b'\xff\xff\xff\xff'
b'\xfe\xff\xff\xff'
b'\xfd\xff\xff\xff'
          .
          .
          .

实际上,我不在乎我的字节如何存储在csv中。我只想在另一个脚本中使用csv.reader将它们返回到字节列表中,并希望加载过程尽可能快。在


Tags: 文件csv代码intestimport脚本列表
1条回答
网友
1楼 · 发布于 2024-05-23 14:34:34

这就行了。在

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)

这将以字节为单位输出文件。样本输出

^{pr2}$

您可以使用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']

相关问题 更多 >