使用utf-8编码写入csv时出现问题

oyt4ldly  于 2023-06-19  发布在  其他
关注(0)|答案(1)|浏览(178)

我试图分析一些facebook messenger数据,但遇到utf-8编码问题。

import os
import json
import datetime
from tqdm import tqdm
import csv
from datetime import datetime 

directory = "facebook-100071636101603/messages/inbox"
folders = os.listdir(directory)

if ".DS_Store" in folders:
    folders.remove(".DS_Store")

for folder in tqdm(folders):
    print(folder)
    for filename in os.listdir(os.path.join(directory,folder)):
        if filename.startswith("message"):
            data = json.load(open(os.path.join(directory,folder,filename), "r"))
            for message in data["messages"]:
                try:
                    date = datetime.fromtimestamp(message["timestamp_ms"] / 1000).strftime("%Y-%m-%d %H:%M:%S")
                    sender = message["sender_name"]
                    content = message["content"]
                    with open('output.csv', 'w', encoding="utf-8") as csv_file:
                        writer = csv.writer(csv_file)
                        writer.writerow([date,sender,content])

                except KeyError:
                    pass

这个脚本可以工作,但是输出csv不显示加重字符。
我对这个非常了解,所以我没有尝试太多。我阅读了Python csv文档,发现了这段话:
由于open()用于打开CSV文件以供阅读,因此默认情况下,该文件将使用系统默认编码解码为unicode(参见locale.getencoding())。要使用不同的编码解码文件,请使用open的encoding参数:
以open('some. csv',newline ='',encoding ='utf-8')导入csv为f:reader = csv.reader(f)用于读取器中的行:打印(行)
但这似乎行不通。
编辑:This is the output I'm getting但它应该是Jørn而不是Jørn和quête,而不是quâte。

iklwldmw

iklwldmw1#

尝试将encoding="utf-8添加到此行:

json.load(open(os.path.join(directory,folder,filename), "r", encoding="utf-8"))

这将确保您导入的每个文件都采用UTF-8编码格式
编辑:
您需要使用pip install ftfy安装ftfy。这个软件包将修复您的损坏的编码。修改sendercontent以修复使用ftfy的编码,方法是这样写:

import ftfy
# Your other code
sender = message["sender_name"]
content = message["content"]
sender = ftfy.fix_text(sender)
content = ftfy.fix_text(content)

您也可以使用ftfy.fix_text(string)来处理任何其他损坏的编码。

相关问题