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

How can I read a byte array file of strings?

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

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'
","ﺞﻨﮕﯾﺪﻧ
","ﺏﺭﺎﯾ ﭗﯾﺩﺍ ﮎﺭﺪﻧ ﯽﮐ ﺖﯿﻣ
"

如您所见,输入线存在问题,但目标线和预测线不存在(尽管被打乱了,但没关系)

似乎有人写错了字节。有人使用 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)