如何读取字符串的字节数组文件?
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)
有一个包含以下内容的文件:
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)