一日一技:Python写的csv文件,如何让 Excel 双击打开不乱码?

简介: 一日一技:Python写的csv文件,如何让 Excel 双击打开不乱码?

摄影:产品经理厨师:Kingname

我们常常需要在 Python 中输出 CSV 文件,但你可能会发现,这些输出的 CSV文件,不能双击使用 Excel 打开,否则中文会变成乱码。例如下面这段代码:

import pandas as pd
datas = [
    {
        'name': '王小一',
        'age': 29,
        'address': '北京'
    },
    {
        'name': '张小二',
        'age': 18,
        'address': '四川'
    },
    {
        'name': '李小三',
        'age': 60,
        'address': '上海'
    }
]
df = pd.DataFrame(datas)
df.to_csv('person.csv', index=False)

如果双击使用 Excel 打开,你会发现中文变成了乱码,如下图所示:

这是因为,当你执行代码 df.to_csv('person.csv',index=False)时,它默认会以 UTF-8编码方式写 CSV 文件。但是当你双击 CSV 使用 Excel打开时,Excel 会以 GBK 编码来读这个文件,这就导致了乱码的发生。

所以,如果是简单的中文,你可以把编码方式人工指定为 GBK:

import pandas as pd
datas = [
    {
        'name': '王小一',
        'age': 29,
        'address': '北京'
    },
    {
        'name': '张小二',
        'age': 18,
        'address': '四川'
    },
    {
        'name': '李小三',
        'age': 60,
        'address': '上海'
    }
]
df = pd.DataFrame(datas)
df.to_csv('person.csv', index=False, encoding='gbk')

此时再双击使用 Excel 打开,中文就能正常显示了,如下图所示:


但 GBK 编码的字符集不够完善,所以如果文本中包含超出 GBK 字符集的内容,就会导致编码错误,如下图所示:

这个时候怎么办呢?

实际上当你双击打开 CSV 的时候,Excel会检查文件的第一个字符,如果这个字符是 BOM,那么他就知道应该使用 UTF-8编码方式来打开这个文件。所谓的 BOM指的是 byte-order mark

BOM对应的 Unicode 码为 \ufeff,所以当我们使用 UTF-8编码方式生成 CSV 以后,再增加一步,把 BOM 写入到文件的第一个字符:

with open('person.csv', encoding='utf-8') as f:
    content = f.read()
content_with_bom = '\ufeff' + content
with open('person.csv', 'w', encoding='utf-8') as f:
    f.write(content_with_bom)

完整代码如下图所示:


此时,新的 CSV 文件可以直接双击通过 Excel 打开,并且中文支持完全正常,如下图所示:

这样生成的 Excel 虽然在 Excel 上显示没有问题,但是如果你发给别人,别人使用 Python 自带的 csv 模块打开,就会发现 address这一列的列名不是 address而是 \ufeffaddress,如下图所示:

这个 BOM字符虽然肉眼看不到,但是程序能够看到,这就会导致别人在读这个 CSV 文件的时候非常不方便。如果直接使用 address去读,还会报错:

难道此时,需要先用普通方式读取 csv 文件,移除第一个 BOM 字符,然后再传给 CSV 模块吗?这未免太过麻烦。

好在 Python 只带了处理 BOM的编码方式 utf-8-sig,无论是写文件还是读文件,只要使用这个编码方式,Python 在写文件的时候会自动加上 BOM,在读文件的时候会自动删除 BOM。

所以生成 CSV 文件的代码如下:

import pandas as pd
datas = [
    {
        'name': '王小一',
        'age': 29,
        'address': '北京'
    },
    {
        'name': '张小二',
        'age': 18,
        'address': '四❤川'
    },
    {
        'name': '李小三',
        'age': 60,
        'address': '上海'
    }
]
df = pd.DataFrame(datas)
df.to_csv('person.csv', index=False, encoding='utf-8-sig')

此时生成的 CSV 文件,可以直接双击使用 Excel 打开,中文正常显示。

如果要使用 Python 的 CSV 模块读取文件,也非常简单,如下图所示:

读取出来的内容直接使用,BOM 已经被 Python 自动移除了。

目录
相关文章
|
9天前
|
机器学习/深度学习 存储 算法
解锁文件共享软件背后基于 Python 的二叉搜索树算法密码
文件共享软件在数字化时代扮演着连接全球用户、促进知识与数据交流的重要角色。二叉搜索树作为一种高效的数据结构,通过有序存储和快速检索文件,极大提升了文件共享平台的性能。它依据文件名或时间戳等关键属性排序,支持高效插入、删除和查找操作,显著优化用户体验。本文还展示了用Python实现的简单二叉搜索树代码,帮助理解其工作原理,并展望了该算法在分布式计算和机器学习领域的未来应用前景。
|
2月前
|
数据采集 数据可视化 数据挖掘
利用Python自动化处理Excel数据:从基础到进阶####
本文旨在为读者提供一个全面的指南,通过Python编程语言实现Excel数据的自动化处理。无论你是初学者还是有经验的开发者,本文都将帮助你掌握Pandas和openpyxl这两个强大的库,从而提升数据处理的效率和准确性。我们将从环境设置开始,逐步深入到数据读取、清洗、分析和可视化等各个环节,最终实现一个实际的自动化项目案例。 ####
296 10
|
5天前
|
文字识别 BI
【图片型PDF】批量识别扫描件PDF指定区域局部位置内容,将识别内容导出Excel表格或批量改名文件,基于阿里云OCR对图片型PDF识别改名案例实现
在医疗和政务等领域,图片型PDF文件(如病历、报告、公文扫描件)的处理需求广泛。通过OCR技术识别这些文件中的文字信息,提取关键内容并保存为表格,极大提高了信息管理和利用效率。本文介绍一款工具——咕嘎批量OCR系统,帮助用户快速处理图片型PDF文件,支持区域识别、内容提取、导出表格及批量改名等功能。下载工具后,按步骤选择处理模式、进行区域采样、批量处理文件,几分钟内即可高效完成数百个文件的处理。
39 8
|
20天前
|
监控 网络安全 开发者
Python中的Paramiko与FTP文件夹及文件检测技巧
通过使用 Paramiko 和 FTP 库,开发者可以方便地检测远程服务器上的文件和文件夹是否存在。Paramiko 提供了通过 SSH 协议进行远程文件管理的能力,而 `ftplib` 则提供了通过 FTP 协议进行文件传输和管理的功能。通过理解和应用这些工具,您可以更加高效地管理和监控远程服务器上的文件系统。
48 20
|
25天前
|
存储 数据采集 数据处理
如何在Python中高效地读写大型文件?
大家好,我是V哥。上一篇介绍了Python文件读写操作,今天聊聊如何高效处理大型文件。主要方法包括:逐行读取、分块读取、内存映射(mmap)、pandas分块处理CSV、numpy处理二进制文件、itertools迭代处理及linecache逐行读取。这些方法能有效节省内存,提升效率。关注威哥爱编程,学习更多Python技巧。
|
2月前
|
人工智能 自然语言处理 Java
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
FastExcel 是一款基于 Java 的高性能 Excel 处理工具,专注于优化大规模数据处理,提供简洁易用的 API 和流式操作能力,支持从 EasyExcel 无缝迁移。
220 9
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
|
26天前
|
存储 JSON 对象存储
如何使用 Python 进行文件读写操作?
大家好,我是V哥。本文介绍Python中文件读写操作的方法,包括文件读取、写入、追加、二进制模式、JSON、CSV和Pandas模块的使用,以及对象序列化与反序列化。通过这些方法,你可以根据不同的文件类型和需求,灵活选择合适的方式进行操作。希望对正在学习Python的小伙伴们有所帮助。欢迎关注威哥爱编程,全栈路上我们并肩前行。
|
1月前
|
存储 算法 Serverless
剖析文件共享工具背后的Python哈希表算法奥秘
在数字化时代,文件共享工具不可或缺。哈希表算法通过将文件名或哈希值映射到存储位置,实现快速检索与高效管理。Python中的哈希表可用于创建简易文件索引,支持快速插入和查找文件路径。哈希表不仅提升了文件定位速度,还优化了存储管理和多节点数据一致性,确保文件共享工具高效运行,满足多用户并发需求,推动文件共享领域向更高效、便捷的方向发展。
|
1月前
|
数据可视化 数据挖掘 大数据
1.1 学习Python操作Excel的必要性
学习Python操作Excel在当今数据驱动的商业环境中至关重要。Python能处理大规模数据集,突破Excel行数限制;提供丰富的库实现复杂数据分析和自动化任务,显著提高效率。掌握这项技能不仅能提升个人能力,还能为企业带来价值,减少人为错误,提高决策效率。推荐从基础语法、Excel操作库开始学习,逐步进阶到数据可视化和自动化报表系统。通过实际项目巩固知识,关注新技术,为职业发展奠定坚实基础。
|
2月前
|
Python
按条件将Excel文件拆分到不同的工作表
使用Python的pandas库,可以轻松将Excel文件按条件拆分到不同的工作表中。本文通过一个示例代码展示了如何生成一个包含总成绩表和三个班级表的Excel文件。代码首先创建了一个包含学生姓名、班级和各科成绩的数据框,然后按班级分组,将每个班级的数据分别写入不同的工作表。最后,生成的Excel文件将包含四个工作表,分别为总成绩表和三个班级的成绩表。
51 6
按条件将Excel文件拆分到不同的工作表

热门文章

最新文章