python 文件基本操作-1

python文件基本操作-1

  • 1 每日速记
  • 2 字符编码
    •   2.1字符编码的介绍
    •   2.2 字符编码的发展史
    •   2.3 字符编码的实际应用
    •   2.3 编码与解码
  • 3 python文件模式
    •   3.1文件操作
    •   3.2 读模式(r)
    •   3.3 写模式(w)
    •   3.4 追加模式(a)
    •   3.5 文本模式(t)
    •   3.6 二进制模式(b)
    •   3.7扩展:

1 每日速记

allotment: n.分配;份额;<英>划分的土地

2 字符编码

  2.1字符编码的介绍

  字符编码只跟文本文件有关。
  字符编码表:内部存储了计算机二进制数字与人类字符对应关系的表。

  2.2 字符编码的发展史

  一家独大:
      ASCII码:记录了英文字母与数字的对应关系。通常用一字节(8bit,共可表示127个字符)来表示单个字符。
  常见ASICII码:A-Z 65-90 a-z 97-112
![ASCII码表](https://img-blog.csdnimg.cn/babd6f061dcd442a9381b99b7821cd0a.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAd2VpeGluXzQwNTc0MTA5,size_17,color_FFFFFF,t_70,g_se,x_16

  群雄割据
    GBK码(中国):《汉字内码扩展规范》,记录汉字与计算机数字的对应关系。
  双字节编码,范围为:8140-FEFE

    shift_JIS码(日本): 一个日本电脑系统常用的编码表。它能容纳全角及半角拉丁字母、平假名、片假名、符号及日语汉字。

    Euc_kr码(韩国):用来储存韩国KSX1001字集(旧称KSC5601)的字符

  天下一统
    unicode(万国码):是一种在计算机上使用的字符编码。它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。1990年开始研发,1994年正式公布。

    utf8(转换版本有多种,功能都是为了优化万国码的存储):UTF-8的特点是对不同范围的字符使用不同长度的编码。对于0x00-0x7F之间的字符,UTF-8编码与ASCII编码完全相同。UTF-8编码的最大长度是4个字节。

  2.3 字符编码的实际应用

    字符不乱码:只要保证源文本文件是用什么编码方案编码的,就用对应的编码方案解码。

    python解释器的编码方案的差异:
         python 2.x 默认使用ASCII码,因此在编译字符串时,需做如下操作:         1.增加文件头
         2.字符串前+‘u’

# coding:utf8
# python 2.X
# s = u'你'
s1 = u'haha'
#print(s)
# '''
# File "D:/py20/day09 ��ϰ/��ϰ����ͬ�汾���뷽ʽ����.py", line 2
# SyntaxError: Non-ASCII character '\xe4'
# '''
print(s1)

  2.3 编码与解码

编码(encode):人类的字符>>>计算机二进制
解码(decode):计算机二进制>>>人类的字符
字符串.encode(编码)

s = '哈哈'
print(s.encode('GBK'))  # b'\xb9\xfe\xb9\xfe'

bytes.decode(解码)

s1 = b'\xb9\xfe\xb9\xfe'
print(s1.decode('GBK')) # 哈哈

3 python文件模式

  3.1文件操作

  取消转义

# 取消转义
# 很多英文字符与斜杠组合到一起会产生特殊含义,解决方式在字符串前加字母r
print('haha\n哈哈')   
'''
haha
哈哈
'''
print(r'haha\n哈哈')  # haha\n哈哈

  with 上下文

  1. open与close使用
    f = open(文件路径,读写模式,编码)
    f.close()
res = open(r'a.txt', 'r', encoding='utf8')
print(res)  # 产生文件句柄,<_io.TextIOWrapper name='a.txt' mode='r' encoding='utf8'>
print(res.read())   # 读取文件
res.close()   # 关闭文件,释放资源
'''
注释
open(文件路径,读写模式,字符编码)文件路径与读写模式是必须的字符编码是可选的(有些模式需要编码)
'''
  1. with语法会自动帮你关闭文件资源
    with open(文件路径,读写模式,编码 as f:
      pass
with open(r'haha.txt', 'r', encoding='utf8') as f:print(f.read())

  3.2 读模式(r)

关键字:r
1.文件不存在:报错

with open(r'a.txt','r',encoding='utf8') as f:print(f.read()) # No such file or directory: 'a.txt'

2.文件存在,可通过关键字read获取文件信息,但只能读不能写

with open(r'haha.txt', 'r', encoding='utf8') as f:print(f.read())  
'''
dadadad
dadada
文件存在,打印文件所有内容
'''

  3.3 写模式(w)

关键字:w
1.文件存在,会先清空文件内容 ,再执行写入操作

with open('haha.txt', 'w', encoding='utf8') as f:f.write('haha')# print(f.read()) # io.UnsupportedOperation: not readable
'''
原文件内容:dadadaddadada
现文件内容:haha
'''

2.文件不存在,会创建新文件

with open('a.txt','w',encoding='utf8') as f:f.write('\n 你好,世界')
'''
文件不存在,创建文件
'''

  3.4 追加模式(a)

1.文件存在,在文件光标尾部追加内容

with open('a.txt', 'a', encoding='utf8') as f:f.write('haha')
'''
原文件:你好,世界
新文件:你好,世界haha
'''

2.文件不存在,创建文件

'''
with open('b.txt','a',encoding='utf8') as f:f.write('你好呀,哈哈')
'''
创建新文件,内容为“你好呀,哈哈”

小总结:r,w,a模式只能操作文本文件

  3.5 文本模式(t)

1.文本模式为默认模式:
    r,w,a >>> rt wt at
2.该模式所有操作都是以字符串为基本单位(文本)
3.该模式必须指定encoding参数
4.该模式只能操作文本文件

  3.6 二进制模式(b)

1.该模式可以操作任意类型文件
2.该模式所有操作都是以bytes类型(二进制)为基本单位
3.该模式不需要指定encoding参数
    rb,wb,ab

  3.7扩展:

文件操作方法扩展:
(1)读模式:
a. read()

with open(r'a.txt', 'r', encoding='utf8') as f:print(f.read())   # 一次性获取文件所有内容

b. readline()

with open(r'a.txt', 'r', encoding='utf8') as f:print(f.readline())  # 1. hahah 每次只读文件一行内容print(f.readline())  # 2. 哈哈

c. readlines()

with open(r'a.txt', 'r', encoding='utf8') as f:print(f.readlines())  # 1.读取文件的所有内容,并输出成列表,每个元素是文件每行的内容

d. readable()

with open(r'a.txt', 'r', encoding='utf8') as f:print(f.readable())  # True 判断当前文件是否可读

(2)写模式
a. write()

with open(r'a.txt', 'w', encoding='utf8') as f:f.write('克服一切困难,奥利给!!!')  # 往文本文件写内容f.write(123)  # 报错,TypeError: write() argument must be str, not int
b. writelines()
with open(r'a.txt', 'w', encoding='utf8') as f:f.writelines(['jason', 'kevin', 'tony'])可以将列表中多个字符串元素全部写入,jasonkevintony

c. writable() 判断文件是否有写的能力

with open(r'a.txt', 'w', encoding='utf8') as f:print(f.writable())  # Trueprint(f.readable())  # False

d. flush()

with open(r'a.txt', 'w', encoding='utf8') as f:f.flush() # 直接将内存的文件数据刷到硬盘,相当于ctrl+s


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部