Heim > Artikel > Backend-Entwicklung > So lösen Sie das Problem verstümmelter Zeichen, die in Python in CSV geschrieben werden
Anforderungshintergrund
Kürzlich ein E-Mail-Tagesprogramm für das Unternehmen entwickelt. Die E-Mails bestehen normalerweise aus Tabellen, Bildern und Anhängen. Anhänge werden im Allgemeinen standardmäßig in TXT-Dateien geschrieben, aber der PM hofft, dass die Anhänge in der E-Mail direkt mit Software wie Excel geöffnet werden können. Zuerst wollte er sie als Excel speichern, aber als er dachte, dass die Dateigröße Excel wäre um ein Vielfaches größer, die CSV-Datei wurde standardmäßig verwendet. Sie wurde auch mit Excel geöffnet, war aber immer noch eine Textdatei. Sie war klein und einfach zu speichern, also entschied ich mich schließlich, das CSV-Modul zum Speichern der Datei zu verwenden.
CSV-Datei mit Python schreiben
Python bietet ein integriertes Modul zum Lesen und Schreiben von CSV-Dateien. Ich werde es hier nicht vorstellen. Der Hauptzweck besteht darin, das Problem verstümmelter Zeichen zu lösen.
def save2csv(file_name=None, header=None, data=None): """ 保存成CSV格式文件,方便Excel直接打开 :param file_name: 保存的文件名 :param header: 表头,每一列的名字 :param data: 具体填充数据 :return: """ if file_name is None or isinstance(file_name, basestring) is False: raise Exception('保存CSV文件名不能为空,并且必须为字符串类型') if file_name.endswith('.csv') is False: file_name += '.csv' file_obj = open(file_name, 'wb') file_obj.write(codecs.BOM_UTF8) # 防止乱码 writer = csv.writer(file_obj) if data is None or isinstance(data, (tuple, list)) is False: raise Exception('保存CSV文件失败,数据为空或者不是数据类型') if header is not None and isinstance(header, (tuple, list)) is True: writer.writerow(header) for row in data: writer.writerow(row)
Hinweis: Es gibt drei Sätze, um verstümmelte Zeichen zu vermeiden
file_obj = open(file_name, 'wb') file_obj.write(codecs.BOM_UTF8) # 防止乱码 writer = csv.writer(file_obj)
Das Schreiben von codecs.BOM_UTF8 in den Dateikopf verhindert verstümmelte Zeichen. Die Dateien liegen alle im UTF-8-Codierungsformat vor
Danke fürs Lesen, ich hoffe, es kann allen helfen, vielen Dank für Ihre Unterstützung dieser Website!