如何读取字符串的字节数组文件?

2024-05-13 13:20:39 发布

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

有一个包含以下内容的文件:

b'prefix:input_text'
b'oEffect:PersonX \xd8\xaf\xd8\xb1 \xd8\xac\xd9\x86\xda\xaf ___ \xd8\xa8\xd8\xa7\xd8\xb2\xdb\x8c \xd9\x85\xdb\x8c \xda\xa9\xd9\x86\xd8\xaf'
b'oEffect:PersonX \xd8\xaf\xd8\xb1 \xd8\xac\xd9\x86\xda\xaf ___ \xd8\xa8\xd8\xa7\xd8\xb2\xdb\x8c \xd9\x85\xdb\x8c \xda\xa9\xd9\x86\xd8\xaf'

这是我尝试读取这些行并将它们转换为可读的utf字符,但它仍然在输出文件中显示相同的字符串:

f = open(input_file, "rb")
for x in f:
  inpcol.append(x.decode('utf-8'))

f = open(pred_file, "r")
for x in f:
  predcol.append(x)

f = open(target_file, "r")
for x in f:
  targcol.append(x)
data =[]
for i in tqdm(range(len(targcol))):
  data.append([inpcol[i],targcol[i],predcol[i]])

pd.DataFrame(data,columns=["input_text","target_text","pred_text"]).to_csv(f"{path}/merge_{predfile}.csv", encoding="utf-8")
print("Done!")

输出文件为:

,input_text,target_text,pred_text
0,"b'prefix:input_text'
","target_text
","ﺏﺭﺎﯾ ﺩﺮﮐ ﻮﻀﻌﯿﺗ
"
1,"b'xNeed:PersonX \xd8\xaf\xd8\xb1 \xd8\xac\xd9\x86\xda\xaf ___ \xd8\xa8\xd8\xa7\xd8\xb2\xdb\x8c \xd9\x85\xdb\x8c \xda\xa9\xd9\x86\xd8\xaf'
","ﺞﻨﮕﯾﺪﻧ
","ﺏﺭﺎﯾ ﭗﯾﺩﺍ ﮎﺭﺪﻧ ﯽﮐ ﺖﯿﻣ
"

正如您所看到的,问题存在于输入行,但不存在于目标行和预测行(尽管有加扰,但这没关系)


Tags: 文件textintargetforinputx86append
1条回答
网友
1楼 · 发布于 2024-05-13 13:20:39

似乎有人把字节写错了。有人用str(bytes)代替了bytes.decode('utf-8')。或者可能代码是为Python 2创建的,它以与Python 3不同的方式处理字节和字符串


如果你能纠正编写它的代码,那么你必须修正文本

text = "b'oEffect:PersonX \xd8\xaf\xd8\xb1 \xd8\xac\xd9\x86\xda\xaf ___ \xd8\xa8\xd8\xa7\xd8\xb2\xdb\x8c \xd9\x85\xdb\x8c \xda\xa9\xd9\x86\xd8\xaf'"

作物b' '

text = text[2:-1]

使用特殊编码'raw_unicode_escape'转换回bytes

text = text.encode('raw_unicode_escape')

并正确地转换为string

text = text.decode()

现在呢

print(text)

给我

oEffect:PersonX در جنگ ___ بازی می کند

编辑:

它似乎将代码转换为带有双斜杠的字符串,如b'\\xd8',但print()可能会将其显示为单斜杠,但print(repr())可能会使用双斜杠显示

它可能需要更多的decode/encode来正确转换它

text = "b'xNeed:PersonX \\xd8\\xaf\\xd8\\xb1 \\xd8\\xac\\xd9\\x86\\xda\\xaf'"
print(repr(text))
print(text)

text = text[2:-1]
text = text.encode('raw_unicode_escape')
text = text.decode('unicode_escape')
text = text.encode('raw_unicode_escape')
text = text.decode()
print(text)

相关问题 更多 >