IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python基础知识(5) -> 正文阅读

[Python知识库]Python基础知识(5)

# P25 字符编码和文件操作


# 1.文件操作
#open('E:\YoloV5\yolov5-master\python_base\a.txt',encoding='字符编码')


# 2.字符编码
# ASCII  ascii用1个字节(8位二进制)代表一个二进制字符   8bit =1Bytes
# gb2312 :规定包含中文在内的自读->数字的对应关系
# GBK; GB2312
# unicode和 UTF-8关系:UTF-8硬盘里面,unicode在内存里面


# 3.文件操作
# 3.1绝对路径
# f =open(r'E:\YoloV5\yolov5-master\python_base\a.txt',encoding='utf-8')# r表示转义字符,utf-8为通用转义字符
# print(f.read()) #读取文件信息
# f.close()#关闭文件

# 3.2相对路径
# f =open(r'a.txt',encoding='utf-8')# r表示转义字符,utf-8为通用转义字符
# print(f.read()) #读取文件信息
# f.close()#关闭文件


# 3.3 当前路径 ../
# f =open(r'../python_base/xuyaoduqudewenjian/a.txt',encoding='utf-8')# r表示转义字符,utf-8为通用转义字符
# print(f.read()) #读取文件信息
# f.close()#关闭读取的文件


# 4.1 上下文管理
# with open(...) as f:
    #pass

# with open(r'a.txt',encoding='utf-8') as f:
#     print(f.read())


# 一.文本的只读模式(r,默认的rt模式)
# 1.当文件不存在时,会报错
# 2.当文件存在时,文件指针指向文件的开头

# with open('a.txt',mode ='rt',encoding='utf-8') as f:# 默认模型是rt模式,可以省略
    # res1 =f.read()
    # print('111>>>',res1) #第一次读完了
    # res2 =f.read()
    # print('222>>>',res2)
    # print(f.readable())#用于判断rt模型是否可读
    # print(f.writable()) #用于判断rt模型是否可写
    # print(f.readline()) #用于读取第一行
    # print(f.readline(),end='')  # 用于读取第一行

    # for 循环遍历文件对象
    # for line in f:
    #     print(line,end='')

    # L =[]
    # for line in f:
    #     L.append(line)
    # print(L)

    #上面的for代码变成一行代替
    # print(f.readlines()) #读取多行文件








# # wt模型(只写模式):1.当文件不存在时,新建一个空文档(简单地说是无则创建)
# with open('b.txt',mode='wt',encoding='utf-8') as f:
#     pass

# wt模型(只写模式): 2.当文件存在的时候,会清空内容,文件清空我们可以写想要的内容
# with open('b.txt',mode='wt',encoding='utf-8') as f:
#     print(f.readable()) #判断是否可读
#     print(f.writable()) #判断是否可写
    # f.write('樊玉和\n')#一次性写一行
    # f.write('郑灿星\n')
    # f.write('大海12345\n')
    # f.write('567890\n')

    # f.write('111\n222\n3333\n') #一次性写多行

    # # 把列表内容一行行写入
    # info =['大海\n','大海\n','红海\n']
    # for line in info:
    #     f.write(line)


    # #上面的一行代码搞定
    # info = ['大海\n', '大海\n', '红海\n','樊玉和\n','郑灿星\n']
    # f.writelines(info)







# at: 只追加写模式
# 1.当文件不存在时,新建新文档,文件指针跑到文件的末尾(开头就是末尾)
# with open('c.txt',mode='at',encoding='utf-8') as f:
#     pass


# 2.当文件存在时,文件指针跑到文件的末尾继续写,与wt的区别是wt模式需要重新写
# with open('c.xls',mode='at',encoding='gbk') as f: #如果utf-8编译模式不可以的话,修改为gbk编译模式
#     print(f.readable()) #判断是否可读,不能读
#     print(f.writable()) #判断是否可写,可以写
#     f.write('大海老师1\n')
#     f.write('大海老师2\n')
#     f.write('大海老师3\n')

# 总结wt和at模式的区别:
# wt模式:在文件打开不关闭的情况下,连续的写入;清空之前的文件内容;
# at模式关闭了下次打开是在 文件末尾写,所以不会覆盖之前的内容



# 操作二进制文件用b模式,可以操作图片(不需要解码)或者文件格式(需要解码)
# with open('1.png',mode='rb') as f:
#     data =f.read()
#     print(data,type(data))
#     print(type(data))
#
# with open('2.png',mode='wb') as f1:
#     f1.write(data) #相当于赋值图片



# 用b模式,也可以对文本文件操作,但是需要解码
# decode :二进制解码成字符
# encode: 字符编码成二进制
# 解码  读的时候转换成字符
# with open('b模式.txt',mode ='rb') as f:
#     data =f.read()
#     print(data)
#     print(data.decode('utf-8'))#文件解码操作utf-8


# 编码  写的时候把字符转换成二进制写入
# with open('wb模式.txt',mode='wb') as f:
#     f.write('dahai\n'.encode('utf-8'))
#     f.write('123\n'.encode('utf-8'))
#     f.write('樊玉和\n'.encode('utf-8'))
#     f.write('郑灿星\n'.encode('utf-8'))





# 可读可写模式:(1)r+t; (2)w+t; (3)a+t三种模式
# (1)r+t模式
# with open('可读可写r+t模式.txt',mode='r+t',encoding='utf-8') as f: #这么模式与rt模式一样,在没有文件时会报错,只是多了哥可写操作
#     print(f.readable())
#     print(f.writable())
#     # msg =f.readline()
#     msg1 =f.readlines()
#     # print(msg)
#     print(msg1)
#     f.write('xxxxxxxx') #在光标处(末尾写)写入内容




# w+t模式:当文件不存在时,新建一个空文档;当文件存在时,清空文件内容,文件指针跑到文件的开头(即有则清空)
# with open('可读可写w+t模式.txt',mode='w+t',encoding='utf-8') as f:
#     print(f.readable())
#     print(f.writable())
#     f.write('aaaaa\n')
#     f.write('樊玉和\n')
#     f.write('郑灿星\n')
#     # 指针移动seek(移动的字节数,开头开始0)
#     # 从开头开始移动0
#     f.seek(0,0)
#     print(f.readline())
#     f.write('ccccccccc')


# (2)a+t模式
# with open('可读可写a+t模式.txt',mode='a+t',encoding='utf-8') as f:
#     print(f.readable())
#     print(f.writable())
#     f.write('aaaaa\n')
#     f.write('樊玉和\n')
#     f.write('郑灿星\n')
#     # 指针移动seek(移动的字节数,开头开始0)
#     # 从开头开始移动0
#     f.seek(0,0)
#     print(f.readline())
#     f.write('ccccccccc')





# 指针移动 f.seek:分为t模式和b模式
# t模式
# with open('指针移动.txt',mode='rt',encoding='utf-8') as f:
#     print(f.read(1))
#     # print(f.read(1))
#     # print(f.read(1))


# b模式
# with open('指针移动.txt',mode='rb') as f:
#     print(f.read(1).decode('utf-8'))#字母开头加上.decode('utf-8'),汉子开头不需要加.decode('utf-8')
#     print(f.read(1))#汉字不需要.decode('utf-8'),不加.decode('utf-8')时可以一次读取3个字节即一个汉字



# 指针操作:f.seek(offset,whence)有两个参数:offset:代表控制指针移动的字节数;whence:代表参照什么位置进行移动
# whence =0: 参考文件开头(默认的),特殊???,可以在t和b模式下使用
# whence =1: 参考当前所在的位置,必须在b模式下用
# whence =2: 参考文件末尾,必须在b模式下用

# 一.t模式下
# with open('seek.txt',mode='rt',encoding='utf-8') as f: # t模式按照字符算
#    f.seek(2,0)
#    print(f.read(1))#read(1)表示制度一个字符(汉字)

# with open('seek.txt',mode='rb') as f: # b模式按照字节算
#    f.seek(5,0) #5代表2个字母+一个汉字(一个汉字3个字节)
#    print(f.read(3).decode('utf-8'))#read(3)表示移动3个字节数(即一个汉字),并且含有解码.decode('utf-8')


# 二、b模式下 移动的字节数,读的也是字节数
# with open('seek.txt',mode= 'rb') as f:
#     f.seek(5,0)
#     print(f.read(3).decode('utf-8'))
# whence =1:参考当前所在的位置,必须在b模式下用
# whence =2:参考文件末尾,必须在b模式下用

# whence =1:参考当前所在的位置,必须在b模式下用
# with open('seek.txt',mode='rb') as f:
#     msg =f.read(5)
#     print(f.tell()) #显示光标所在字节数
#     f.seek(3,1)
#     print(f.read(3).decode('utf-8'))

# whence =2:参考文件末尾,必须在b模式下用
# with open('seek.txt',mode='rb') as f:
#     f.seek(0,2)
#     print(f.tell())
#     f.seek(-3,2)
#     print(f.read(3).decode('utf-8'))




# 检测文件末尾新增的内容
# with open('历史.txt',mode='rb') as f:
#     f.seek(0,2)
#     while True:
#         line = f.readline()
#         if len(line) !=0: #如果是0个bytes意味着光标在最后
#             print(line.decode('utf-8'),end='')


# import time
# # at模块
# with open('历史.txt',mode='at',encoding='utf-8') as f:
#     f.write('%s夏洛转账给大海1个亿\n'%time.strftime('%Y-%m-%d %H:%M:%S'))




# 文件修改及方式一:
# 1.将文件的内容由硬盘全部读入内存
# 2.在内存中完成修改
# 3.将内存中修改后的结果覆盖写回硬盘
# with open('文件修改.txt',mode='rt',encoding='utf-8') as f:
#     all_data = f.read()
# with open('文件修改.txt',mode='wt',encoding='utf-8') as f1:
#     f1.write(all_data.replace('红黄蓝','大海'))




# 修改文件的方式二:
# 1.以读的方式打开源文件,以写的方式打开一个临时文件
# 2.从源文件中读取一样内容修改完毕后写入临时文件,直接源文件读取完毕
# 3.删掉源文件,将临时文件重命名为源文件

# import os
# with open('文件修改二.txt',mode='rt',encoding='utf-8') as read_f,open('临时文件.txt',mode='wt',encoding='utf-8') as write_f:
#     for line in read_f:
#         write_f.write(line.replace('大海','夏洛'))
# # 文件修改二删除
# os.remove('文件修改二.txt')
# # 临时文件.txt改为:文件修改二
# os.rename('临时文件.txt','文件修改二.txt')



# 两种修改文件方式的优缺点:
# 方式一:优点:在文件修改的过程中硬盘上始终一份数据
#         缺点:占用内存过多,不适用于大文件
# 方式二:优点:同一时刻在内存中只存在源文件的一行内容,不会过多地占用内存,适用于大文件
#         缺点:在文件修改的过程中会出现源文件与临时文件共存,硬盘上同一时刻会有两份数据,即在修改的过程中会过多的占用硬盘。



# 如何避免乱码:
# 代码混乱或者报错现象(1)
# with open('text1.txt',mode ='w',encoding='shift_jis') as f1: #仅适用于日语
#     f1.write('生まれつき役に立つ')
#
# with open('text1.txt',mode='r',encoding='shift_jis') as f1: #当编码是shift_jis正常编码,但是当使用gbk时就是乱码
#     a =f1.read()
#     print(a)


# 代码混乱或者报错现象(2):英文用什么编码都可以,例如utf-8,gbk,shift_jis等
# with open('text1.txt',mode ='w',encoding='gbk') as f1: #仅适用于日语
#     f1.write('I believe')
#
# with open('text1.txt',mode='r',encoding='gbk') as f1: #当编码是shift_jis正常编码,但是当使用gbk时就是乱码
#     a =f1.read()
#     print(a)


# !!!!!总结非常重要两点!!!
# 1.保证不乱吗的核心原则就是,字符按照什么标准编码,就要按照什么标准解码,此处的标准就是指定的字符编码。
# 2.在内存中写的所有字符,一视同仁,都是unicode编码,比如我们大考编码器,输入一个‘你’,
# 该符号可能很多国家都在使用,根据我们使用的输入法不同这个字的样式可能也不太一样。
# 只有在我们往硬盘保存或者基于网络传输时,才能确定‘你’到底是一个汉字,还是一个日本字,这就是unicode
# 转换成其它编码格式的过程。

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-09-30 11:53:45  更:2021-09-30 11:54:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 16:41:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码