Python基础3 文件操作、字符编码与转码

文件操作

对文件操作过程

打开文件,得到文件句柄赋值给变量

操作

关闭文件

打开文件的模式有:

r,只读模式(默认)。

w,只写模式。【不可读;不存在则创建;存在则删除内容;】

a,追加模式。【可读;   不存在则创建;存在则只追加内容;】

"+" 表示可以同时读写某个文件

r+,可读写文件。【可读;可写;可追加】

w+,写读

a+,同a

"U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用)

rU

r+U

"b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)

rb

wb

ab

#文件句柄
f = open(‘yesterday‘,‘r‘,encoding=‘utf-8‘)

#r模式为读模式
f = open(‘yesterday‘,‘r‘,encoding=‘utf-8‘)

#w模式为写,创建文件
f = open(‘yesterday2‘,‘w‘,encoding=‘utf-8‘)
f.write("我爱北京天安门,\n")
f.write("天安门上太阳升\n")

#a模式为追加,创建文件
f = open(‘yesterday2‘,‘a‘,encoding=‘utf-8‘)
f.write("我爱北京天安门,\n")
f.write("天安门上太阳升\")

#关闭文件
f.close()

#读前5行
f = open(‘yesterday2‘,‘r‘,encoding=‘utf-8‘)
for i in range(5):
    print (f.readline())

# 循环读每行
f = open(‘yesterday2‘,‘r‘,encoding=‘utf-8‘)
for i in f.readlines():
    print (i,)

# 读前9行
count = 0
f = open(‘yesterday2‘,‘r‘,encoding=‘utf-8‘)
for line in f:
    if count == 9:
        print (‘------我是分割线-------‘)
        count += 1
        continue
    print (line.strip())
    count += 1

#seek和tall用法
f = open(‘yesterday2‘,‘r‘,encoding=‘utf-8‘)
print (f.tell())
print (f.readline().strip())
print (f.readline().strip())
print (f.readline().strip())
print (f.tell())
f.seek(0)
print (f.readline().strip())

#强制刷新保存
f.flush()

#截断
f = open(‘yesterday2‘,‘r‘,encoding=‘utf-8‘)
f.truncate(10)

#读写,r+,读和追加
f = open(‘yesterday2‘,‘r+‘,encoding=‘utf-8‘)
print (f.readline())
print (f.readline())
print (f.readline())
f.write(‘-----diao----\n‘)
print (f.readline())

#写读,w+,先创建一个文件
f = open(‘yesterday2‘,‘w+‘,encoding=‘utf-8‘)
f.write(‘-----diao----\n‘)
f.write(‘-----diao----\n‘)
f.write(‘-----diao----\n‘)
f.write(‘-----diao----\n‘)
print (f.tell())
f.seek(10)
print (f.readline())
f.write(‘should\n‘)

#追加读,a+

#读二进制文件
f = open(‘yesterday2‘,‘rb‘)
print (f.readline())

#写二进制文件
f = open(‘yesterday2‘,‘wb‘)
f.write(‘hello\n‘.encode(‘utf-8‘))
f.close()

#文件修改
f = open(‘yesterday2‘,‘r‘,encoding=‘utf-8‘)
f_new = open(‘yesterday3‘,‘w‘,encoding=‘utf-8‘)
for line in f:
    if ‘肆意的快乐‘ in line:
        line = line.replace(‘肆意的快乐等我享受‘,‘肆意的快乐等xxx享受‘)
    f_new.write(line)
f.close()

with语句

with open(‘file_name‘, r) as f:
    ...

# 在Python 2.7 后,with又支持同时对多个文件的上下文进行管理
with open(‘log1‘) as obj1, open(‘log2‘) as obj2:
    ...

字符编码与转码

需知:

在python2默认编码是ASCII, python3里默认是unicode

unicode 分为 utf-32(占4个字节),utf-16(占两个字节),utf-8(占1-4个字节), so utf-16就是现在最常用的unicode版本, 不过在文件里存的还是utf-8,因为utf8省空间

在py3中encode,在转码的同时还会把string 变成bytes类型,decode在解码的同时还会把bytes变回string

python2

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

import sys
print(sys.getdefaultencoding())

msg = "我爱北京天安门"
msg_gb2312 = msg.decode("utf-8").encode("gb2312")
gb2312_to_gbk = msg_gb2312.decode("gbk").encode("gbk")

print(msg)
print(msg_gb2312)
print(gb2312_to_gbk)

python3

#-*-coding:gb2312 -*-   #这个也可以去掉

import sys
print(sys.getdefaultencoding())

msg = "我爱北京天安门"
#msg_gb2312 = msg.decode("utf-8").encode("gb2312")
msg_gb2312 = msg.encode("gb2312") #默认就是unicode,不用再decode,喜大普奔
gb2312_to_unicode = msg_gb2312.decode("gb2312")
gb2312_to_utf8 = msg_gb2312.decode("gb2312").encode("utf-8")

print(msg)
print(msg_gb2312)
print(gb2312_to_unicode)
print(gb2312_to_utf8)

赋值及深浅拷贝

对于 数字 和 字符串 而言,赋值、浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址

赋值

#赋值
#n1 n2指向同一内存地址,修改n1后n2依然指向之前的内存地址,n1内存地址变了
n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 456]}
n2 = n1
print(id(n1))
print(id(n2))
n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 456]}
print(id(n1))
print(id(n2))
print(n2)

浅拷贝

#复制列表,浅copy
#增加一个内存指针指向已经存在的内存,只影响第一层
names = [‘ZhangYang‘,‘ZhaoYi‘,‘ShaoYiFan‘,‘JiaChen‘,‘MengLingJun‘,‘LiuLin‘,[‘YangRui‘]]
names2  = names.copy()
print (names,names2)

import copy
#浅copy,3中方式
person = [‘name‘,[‘saving‘,100]]
‘‘‘
p1 = copy.copy(person)
p2 = person[:]
p3 = list(person)
‘‘‘
p1 = person[:]
p2 = person[:]
p1[0] = ‘tom‘
p2[0] = ‘jane‘
p1[1][1] = 50
print (p1)
print (p2)

深拷贝

import copy
#复制列表,深copy
#增加一个内存指针并申请一块新的内存

names2 = copy.deepcopy(names)

names[3] = ‘汤姆‘
names[-1][0] = ‘杰克‘
print (names)
print (names2)
时间: 2024-10-13 01:08:53

Python基础3 文件操作、字符编码与转码的相关文章

python基础11 文件操作 ,字符编码

主要内容 文件操作 文件操作 打开文件的模式 打开文件的模式有: r,只读模式(默认). w,只写模式.[不可读:不存在则创建:存在则删除内容:] a,追加模式.[可读:不存在则创建:存在则只追加内容:] "+" 表示可以同时读写某个文件 r+,可读写文件.[可读:可写:可追加] w+,写读 a+,同a r+:可读可写,若文件不存在,报错:w+: 可读可写,若文件不存在,创建. "U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模

Python——day3_基础1_集合,文件操作,字符编码与转码

集合 集合是一个无序的,不重复的数据组合,它的主要作用如下: 去重,把一个列表变成集合,就自动去重了 关系测试,测试两组数据之前的交集.差集.并集等关系 常用操作 s = set([3,5,9,10]) #创建一个数值集合 t = set("Hello") #创建一个唯一字符的集合 a = t | s # t 和 s的并集 b = t & s # t 和 s的交集 c = t – s # 求差集(项在t中,但不在s中) d = t ^ s # 对称差集(项在t或s中,但不会同时

python基础(三)----字符编码以及文件处理

字符编码与文件处理 一.字符编码 由字符翻译成二进制数字的过程 字符--------(翻译过程)------->数字 这个过程实际就是一个字符如何对应一个特定数字的标准,这个标准称之为字符编码. 字符编码的发展史 阶段一:现代计算机起源于美国,最早诞生也是基于英文考虑的ASCII ASCII:一个Bytes代表一个字符(英文字符/键盘上的所有其他字符),1Bytes=8bit,8bit可以表示0-2**8-1种变化,即可以表示256个字符 ASCII最初只用了后七位,127个数字,已经完全能够代

【python基础】文件操作

首先要明确的就是python对文件的操作实质上是需要调配两种资源: 1.宿主机的系统资源,比如Linux下的limit文件句柄数 2.python内存资源 两种使用方法: 方式一: f=open('aaa.txt','rt',encoding='utf8') f.read() f.close ##释放系统资源,向系统发送指令告知,程序结束,请求系统关闭文件 方式二: with open('aaa.txt','rt',encoding='utf8') as f: f.read() ps:方式二借助

python基础(三)文件操作和集合

一.文件操作 对文件的操作分三步: 1.打开文件获取文件的句柄,句柄就理解为这个文件 2.通过文件句柄操作文件 3.关闭文件. 1.文件基本操作: f = open('file.txt','r') #以只读方式打开一个文件,获取文件句柄,如果是读的话,r可以不写,默认就是只读, 在python2中还有file方法可以打开文件,python3中file方法已经没有了,只有open frist_line = f.readline()#获取文件的第一行内容,返回的是一个list print(frist

python基础(文件操作)

文件操作 1,文件路径 绝对路径:从根目录到目标文件路径 #绝对路径 f = open('d:\模特主妇护士班主任.txt',mode='r',encoding='UTF-8') content = f.read() print(content) f.close() 相对路径:根目录相同文件夹下的文件名 2,编码方式:utf-8,gbk....... 3,操作方式:只读,只写,追加,读写,写读..... 文件读取:以什么编码方式存储的就以什么编码方式打开 # f = open('文件路径',mo

Python 基础之文件操作与文件的相关函数

一:文件操作 fp =open("文件名",mode="采用的模式",encoding="使用什么编码集")fp 这个变量接受到open的返回值  是一个文件io对象 (又称文件句柄)i => input 输入o => output输出有了对象之后,就可以使用对象.属性 或者 对象.方法进行操作fp.write("字符串")fp.close() #关闭文件fp.read() #读取内容 #1.文件的写入和读取 #(

python基础学习——文件操作的其他方法

1.closed 判断文件是否关闭,关闭则返回True 2.encoding,文件打开的编码方式 3.flush刷新:将内存数据刷新到硬盘里 4.tell:当前光标所在位置 只要不是read方法,读取的是字符.其余的文件内光标移动都是以字节为单位 f=open("肖战哥哥","r",encoding="utf-8",newline="") #读取文件中真正的换行符号 print(f.tell()) f.readline() p

Python基础之文件操作流与函数

一.文件操作 打开文件的方式有: r,只读模式(默认) w,只写模式(不可读:不存在则创建:存在则删除内容:) a,追加模式(可读:   不存在则创建:存在则只追加内容:) "+"表示可以同时读写某个文件 r+,可读写文件(可读:可写) w+,写读文件(可写:可读) a+,同a "b"表示处理二进制文件 rb wb 1."r"读取文件,并将文件输出出来,encoding="utf-8"是将文件读取出来以后转换成utf-8格式,