(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 编码)
参考链接:
实际使⽤:
⽅式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 adlines():
line = lines.strip().split(' ')
id = line[0]
content = line[1]
使⽤with语句,⽂件会在with代码块结束后⾃动关闭
2 其他常⽤函数
2.1 tall():可给出句柄当前⽂件的位置,返回整数值
实际使⽤:
f = open(path)
f2 = open(path, 'rb') # Binary mode
f.tall() #返回11,当前⽂件读取是10,但是默认编码,需要设置解密,故多了⼀个
f2.tall() #返回10
2.2 getdefaultencoding()
import sys
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 使⽤
writelines使用方法python⽂本模式下,⽤open⽅法的选项参数encoding,将⽂件内容从unicode编码转码为其他类型的编码
with open(path,encoding='utf8') as f:
3.3常⽤函数
str.decode('utf-8'):字符串加密
除⼆进制模式,在打开⽂件时使⽤seek要当⼼,如⽂件的句柄位置恰好在unicode中间,后续读取会导致错误 实际使⽤:⽂件中含有中⽂,且区分直接编码成gbk
先将系统默认编码改成utf8,再utf8转gbk即可
# -*- coding: utf-8 -*-
with open(write_path, 'a') as f:
sql = de('utf-8').decode('utf-8').encode('gbk').decode('gbk')
本篇知识点参考《利⽤python进⾏数据分析》,更多知识请阅读原书
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论