Python编程:Python2.7环境下的中文文件读写

简介: Python编程:Python2.7环境下的中文文件读写

测试过程比较啰嗦,可以直接看文章底部的结论

测试环境

python 2.7.5

读写的文本

# -*- coding: utf-8 -*-
poetry = """
相思
唐代:王维
红豆生南国,春来发几枝。
愿君多采撷,此物最相思。
"""

1、直接读写中文(正常)

# -*- coding: utf-8 -*-
# 写入(正常)
f = open("相思.txt", "w")
f.write(poetry)
f.close()
# 读取(正常)
f = open("相思.txt", "r")
print(f.read())
f.close()

2、引入future 后读写中文(报错)

# -*- coding: utf-8 -*-
from __future__ import unicode_literals, print_function
# 写入(报错)
f = open("相思.txt", "w")
f.write(poetry)
f.close()
"""
Traceback (most recent call last):
  File "code_demo.py", line 18, in <module>
    f.write(poetry)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-2: 
ordinal not in range(128)
"""
# 读取(正常)
f = open("相思.txt", "r")
print(f.read())
f.close()

3、引入future 后通过io读写中文(正常)

# -*- coding: utf-8 -*-
from __future__ import unicode_literals, print_function
import io
# 写入(正常)
f = io.open("相思.txt", "w")
f.write(poetry)
f.close()
# 读取(正常)
f = io.open("相思.txt", "r")
print(f.read())
f.close()

4、使用codecs直接读写中文(正常)

# -*- coding: utf-8 -*-
import codecs
# 写入(正常) 
f = codecs.open("相思.txt", "w")
f.write(poetry)
f.close()
# 读取(正常)
f = codecs.open("相思.txt", "r")
print(f.read())
f.close()

5、引入future 后使用codecs读写中文(报错)

# -*- coding: utf-8 -*-
from __future__ import unicode_literals, print_function
import codecs
# 写入(报错) 
f = codecs.open("相思.txt", "w")
f.write(poetry)
f.close()
"""
Traceback (most recent call last):
  File "code_demo.py", line 19, in <module>
    f.write(poetry)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-2: 
ordinal not in range(128)
"""
# 读取(正常)
f = codecs.open("相思.txt", "r")
print(f.read())
f.close()

6、引入future 后使用codecs指定编码后读写中文(正常)

# -*- coding: utf-8 -*-
from __future__ import unicode_literals, print_function
import codecs
# 写入(正常)  需要制定编码  "utf-8"
f = codecs.open("相思.txt", "w", "utf-8")
f.write(poetry)
f.close()
# 读取(正常)
f = codecs.open("相思.txt", "r")
print(f.read())
f.close()

总结

环境

编码

读写方式

读情况

写情况

默认

ASCII

open

-

-

引入future

unicode

open

-

报错

引入future

unicode

io.open

-

-

默认

ASCII

codecs.open

-

-

引入future

unicode

codecs.open

-

报错

引入future

unicode

codecs.open指定编码utf-8

-

-


所以,默认编码是ASCII码,正常情况下直接读写是没有问题的,如果引入新特性future.unicode_literals之后,文件的中文编码变成了unicode,原来的不支持unicode读写的方式就会报错


在Python2.7 中,内建的 open函数是没有encoding参数的,不能指定编码,只能通过io.open 来读写unicode编码的中文,或者通过codecs.open 指定编码方式


在Python3之后,内建的 open函数添加了encoding参数,可以直接指定编码,当然Python3的默认编码已经改为了unicode,没有那么多问题


相关文章
|
3月前
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的首选语言
Python:现代编程的首选语言
316 102
|
3月前
|
数据采集 机器学习/深度学习 算法框架/工具
Python:现代编程的瑞士军刀
Python:现代编程的瑞士军刀
345 104
|
2月前
|
Python
Python编程:运算符详解
本文全面详解Python各类运算符,涵盖算术、比较、逻辑、赋值、位、身份、成员运算符及优先级规则,结合实例代码与运行结果,助你深入掌握Python运算符的使用方法与应用场景。
211 3
|
2月前
|
数据处理 Python
Python编程:类型转换与输入输出
本教程介绍Python中输入输出与类型转换的基础知识,涵盖input()和print()的使用,int()、float()等类型转换方法,并通过综合示例演示数据处理、错误处理及格式化输出,助你掌握核心编程技能。
479 3
|
2月前
|
并行计算 安全 计算机视觉
Python多进程编程:用multiprocessing突破GIL限制
Python中GIL限制多线程性能,尤其在CPU密集型任务中。`multiprocessing`模块通过创建独立进程,绕过GIL,实现真正的并行计算。它支持进程池、队列、管道、共享内存和同步机制,适用于科学计算、图像处理等场景。相比多线程,多进程更适合利用多核优势,虽有较高内存开销,但能显著提升性能。合理使用进程池与通信机制,可最大化效率。
295 3
|
2月前
|
监控 机器人 编译器
如何将python代码打包成exe文件---PyInstaller打包之神
PyInstaller可将Python程序打包为独立可执行文件,无需用户安装Python环境。它自动分析代码依赖,整合解释器、库及资源,支持一键生成exe,方便分发。使用pip安装后,通过简单命令即可完成打包,适合各类项目部署。
|
2月前
|
Java 调度 数据库
Python threading模块:多线程编程的实战指南
本文深入讲解Python多线程编程,涵盖threading模块的核心用法:线程创建、生命周期、同步机制(锁、信号量、条件变量)、线程通信(队列)、守护线程与线程池应用。结合实战案例,如多线程下载器,帮助开发者提升程序并发性能,适用于I/O密集型任务处理。
302 0
|
11月前
|
存储 数据采集 数据处理
如何在Python中高效地读写大型文件?
大家好,我是V哥。上一篇介绍了Python文件读写操作,今天聊聊如何高效处理大型文件。主要方法包括:逐行读取、分块读取、内存映射(mmap)、pandas分块处理CSV、numpy处理二进制文件、itertools迭代处理及linecache逐行读取。这些方法能有效节省内存,提升效率。关注威哥爱编程,学习更多Python技巧。
300 8
|
SQL JSON 关系型数据库
n种方式教你用python读写excel等数据文件
n种方式教你用python读写excel等数据文件
228 1
|
Python
python读写execle文件数据
python读写execle文件数据
156 0

推荐镜像

更多