(7)python 之 文件操作(open函数) 与Unicode编码

1 操作文件 open()函数详解

 

open() 函数用于创建或打开指定文件,语法格式:

file = open(file_name , mode='r' , buffering=-1 , encoding = 'utf-8')

file:表示要创建的文件对象。

file_name:要创建或打开文件的文件名称(最好绝对路径)

mode:可选,用于指定文件的打开模式。如果不写,则默认以只读(r)模式打开文件。

可选模式:

r:只读(文件必须存在);  w:只写 (若文件存在,会覆盖文件;反之,则创建新文件)

a:以追加模式打开一个文件(存在,追加;不存在,创建)

buffering:可选,用于指定对文件做读写操作时,是否使用缓冲区。

encoding:手动设定所使用的编码格式,不同平台的 ecoding 参数值也不同,以 Windows 为例,其默认为 cp936(实际上就是 GBK 编码)

参考链接:Python open()函数详解:打开指定文件 (biancheng.net)

实际使用:

 方式1:

定义一个open的方法

def open_flat(output_path_flie, mode):
    try:
        out = open(output_path_flie, mode, encoding='utf-8')
        return out
    except Exception as e:
        raise e

调用:

写出模式:
fileObj= open_flat(output_path_flie, 'w') #创建操作文件对象
txt='xxxxx'
fileObj.write('\007'.join(txt) + "\n") #写出 '\007'.join, 每个元素间用\007连接
output.flush()
output.close() #关闭

解析 '\007'.join :
# 连接多个字符串
strs = ['a', 'b', 'c', 'd']     # 要连接的字符串数组
sep = '\007'                       # 字符串之间的分隔符
s = sep.join(strs)              # 连接
print s                         # 输出 a\x07b\x07c\x07d
方式2:
txt='xxxxx'
with open(output_path_flie, 'w') as csv_write:#创建操作文件对象 自带关闭csv_write.write('\007'.join(txt).encode('utf-8')+'\n') #写出

读取模式:
with open(source_file, 'r', encoding='utf-8') as f:
    for lines in f.readlines():
       line = lines.strip().split(' ')
       id = line[0]
       content = line[1]

使用with语句,文件会在with代码块结束后自动关闭

2 其他常用函数

2.1 tall():可给出句柄当前文件的位置,返回整数值

实际使用:

f = open(path)
f.read(10)
f2 = open(path, 'rb')  # Binary mode
f2.read(10)
f.tall() #返回11,当前文件读取是10,但是默认编码,需要设置解密,故多了一个
f2.tall() #返回10

 2.2 getdefaultencoding()

import sys
sys.getdefaultencoding()系统默认编码

2.3 seek():移动到指定的位置(整数)

f.seek(3)  #返回3

2.4 read(size):将文件数据作为字符串返回,可选参数size控制读取的字节数

2.5 readlines(size):返回文件中行内容的列表,size参数可选

2.6 write(str):将字符串写出文件

2.7 writelines(strs):将字符串序列写出文件

2.8 close():关闭文件;closed:如文件已关闭,则为true

2.9 flush() :将内部I/O缓冲器内容刷新到硬盘

3 字节与unicode文件

3.1定义

默认的python文件行为是文本模式,需处理python的字符串,

据文本编码,可能将字节解码为str对象,但只有每个已编码的unicode字段完整的情况下,才能进行解码

3.2 使用

文本模式下,用open方法的选项参数encoding,将文件内容从unicode编码转码为其他类型的编码

with open(path,encoding='utf8') as f:

3.3常用函数

str.encode('utf-8'):字符串解密

str.decode('utf-8'):字符串加密

除二进制模式,在打开文件时使用seek要当心,如文件的句柄位置恰好在unicode中间,后续读取会导致错误

 实际使用:文件中含有中文,且区分直接编码成gbk

先将系统默认编码改成utf8,再utf8转gbk即可

# -*- coding: utf-8 -*-

with open(write_path, 'a') as f:

sql = sql.encode('utf-8').decode('utf-8').encode('gbk').decode('gbk')

本篇知识点参考《利用python进行数据分析》,更多知识请阅读原书

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值