gpt4 book ai didi

python - t.unicode ('utf-8' 的意外行为)- Python

转载 作者:太空宇宙 更新时间:2023-11-04 10:35:31 25 4
gpt4 key购买 nike

我有一个包含多个键的 json 文件。我想使用其中一个键并将该字符串写入文件。该字符串最初是unicode。所以,我这样做, s.unicode('utf-8')

现在,我写入另一个文件的那个 json 中有另一个键(这是一个机器学习任务,我在一个文件中写入原始字符串,在另一个文件中写入特征)。问题是最后,带有 unicode 字符串的文件结果有更多的行数(当使用“wc -l”计算时),这误导了我的工具,它崩溃说大小不一样。

引用代码:

for line in input_file:
j = json.loads(line)
text = j['text']
label = j[t]

output_file.write(str(label) + '\t' + text.encode('utf-8') + '\n')
norm_file.write(j['normalized'].encode('utf-8') + '\n')

使用“wc -l”时的区别

16862965

这是我期望的行数,我得到的是

16878681

实际上更高。所以我写了一个脚本来查看实际有多少个输出标签

with open(sys.argv[1]) as input_file:
for line in input_file:
p = line.split('\t')
if p[0] not in ("good", "bad"):
print p
else:
c += 1


print c

而且,你瞧,我有 16862965 行,这意味着有些是错误的。我将它们打印出来,得到一堆空的换行符 ('\n')。所以我想我的问题是,“像这样处理 unicode 时我错过了什么?”我是否应该去掉所有前导和尾随空格(不是字符串中有任何空格)

最佳答案

JSON 字符串中不能包含文字换行符,例如,

not_a_json_string = '"\n"' # in Python source
json.loads(not_a_json_string) # raises ValueError

但它们可以包含转义的换行符:

json_string = r'"\n"' # raw-string literal (== '"\\n"')
s = json.loads(json_string)

即原始文本 (json_string) 中没有换行符(它有反斜杠后跟 n 字符——两个字符)但解析结果包含换行符:'\n' in s

这就是为什么这个例子:

for line in file:
d = json.loads(line)
print(d['key'])

可能会打印比文件包含的行更多的行。

与utf-8无关

通常,非本地换行符也可能存在问题,例如 b'\r\r\n\n',或者 Unicode 换行符(例如 u'"\u2028
"' (U+2028 LINE SEPARATOR))存在问题.

关于python - t.unicode ('utf-8' 的意外行为)- Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23507236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com