Python がテキスト ドキュメントを読み取った後、表面上では文字列は同じ長さに見えますが、2 つの長さは異なります (\ufeff) Python は json ドキュメントを読み書きします

Python がテキスト ドキュメントを読み取った後、文字列は表面上は同じ長さに見えますが、2 つの長さは異なります (\ufeff)

1. Python はテキストドキュメントを読み取ります

Python を使用して txt ドキュメントを読み取ると、共通のエンコーディング = "utf-8" が使用され、読み取られる文字列の前に (\ufeff) が付き、長さは 1 になるため、2 つの文字列の長さは異なります。文字列を読み取ると、読み取られた文字列の長さは常に実際の文字列の長さより 1 長くなります。これは、strip() では削除できません。

ネットで検索したところ、BOM(Byte Order Mark、テキストファイルのヘッダーに表示されるバイトオーダーマーク。Unicode エンコード標準でファイルのエンコード形式を識別するために使用されます)が含まれていたことがわかりました。テキストを保存しました。テキストを保存します。ファイルに bom が含まれないように注意してください。すでに bom が含まれている場合は、notepad++ エディターを使用して、BOM 形式なしのテキスト ファイルに変換できます。
修正後の正しいスペル
修正後の正しいスペル

2. Python は json ファイルを読み取ります

text = open(global_newest_pool, "r", encoding="utf-8-sig")
for line in text.readlines():
    jsonOne = json.loads(line)
    #   print(jsonOne['_id'])
    #   读取json文件格式的数据,加载到内存


with open(global_recall_result_one, "wb+") as f:
    f.write(str(fina_recall_list).encode('utf-8'))
    #json.dumps(paperList, f)
    print("写入单个的文件完成")
    #把整个列表存入json文件,整个列表占一行


if os.path.isfile(global_recall_result_many):
    os.remove(global_recall_result_many)
    #先判断这个json文件存在不?存在就删除,因为后面是追加模式,把每一个完整列表追加到下一行。
    with open(global_recall_result_many, "ab+") as f:
        f.write(str(recallPaperList).encode('utf-8'))
        f.write(str('\n').encode('utf-8'))

おすすめ

転載: blog.csdn.net/baidu_41810561/article/details/115950335