我试图分析一些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。
1条答案
按热度按时间iklwldmw1#
尝试将
encoding="utf-8
添加到此行:这将确保您导入的每个文件都采用UTF-8编码格式
编辑:
您需要使用
pip install ftfy
安装ftfy。这个软件包将修复您的损坏的编码。修改sender
和content
以修复使用ftfy的编码,方法是这样写:您也可以使用
ftfy.fix_text(string)
来处理任何其他损坏的编码。