这个馒头有点小

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

一、安装第三方工具箱(原作者:main_h_

 二、文件读取(tip:文件以什么编码保存的,一定要用什么编码进行读取,这样才不会乱码)

   1)文件的普通读取  

1 f = open(file="破阵子·为陈同甫赋壮词以寄之.txt",mode="r",encoding="GBK")
2 data = f.read()
3 print(data)
4 f.close()
f_read

  2)以字节方式读入文件

1 f = open(file="破阵子·为陈同甫赋壮词以寄之.txt",mode="rb")
2 data = f.read()
3 print(data)
4 f.close()
f_rb

  3)当我们不知道或忘记了文件是以什么编码进行保存的时候,我们可以通过第三方工具箱chardet进行猜测

 1 #安装第三方工具箱 chardet
 2 ## 用pip3命令 例:pip3 Install chardet
 3 ## 用chardet模块来尝试判断文件的编码
 4 import chardet
 5 f = open("破阵子·为陈同甫赋壮词以寄之.txt","rb")
 6 data = f.read()
 7 f.close()
 8 print(chardet.detect(data))
 9 # {'language': 'Chinese', 'encoding': 'GB2312', 'confidence': 0.99}
10 ## confidence 自信程度
chardet_detect

   4)循环逐行读出

1 #循环读取每一行进行输出显示
2 ##单独print(line)的时候,每一行中间都会有一行空行,这是因为print本身会打印换行符
3 ##那怎么办呢?直接把每一此读取出来的行把换行符进行替换掉即可,那应该写成这样:print(line.replace("\n",""))
4 ##tip: \n 换行符 \t TAB键
5 f = open("破阵子·为陈同甫赋壮词以寄之.txt","r",encoding="GB2312")
6 for line in f:
7     print(line.replace("\n",""))
8 f.close()
readline_while

  5)文件的写入操作

 1 #文件的写入(Tip:像这样写入,是会把原先的文件进行删除后再写入内容的操作)
 2 ##在py3中,可以这样写,这样写它会以GBK的编码进行写入
 3 f = open("破阵子.txt","w",encoding="GBK")
 4 f.write("八百里")
 5 f.close()
 6 ##也可以写成这样,这样它就肯定是以GBK的编码进行写入
 7 f = open("破阵子.txt","w",encoding="GBK")
 8 f.write("八百里".encode("GBK"))
 9 f.close()
10 #追加字符 append_bytes 简写 ab
11 ##tip:这样只会在文件的末尾追加一行
12 f = open("破阵子.txt","ab")
13 f.write("\n沙场秋点兵".encode("gbk"))
14 f.close()
file_write

  6)文件的混合操作

 1 #混合模式 读写:r+ 写读:w+(写读几乎没有应用场景,因为它是把原先的文件删掉,在创建一个新的文件进行写入操作)
 2 f = open("破阵子.txt","r+",encoding="gbk")
 3 print("content: ",f.read())
 4 
 5 f.write("\n马儿飞快")
 6 f.write("\n了却君王天下事")
 7 f.write("\n赢得身前生后名,可怜白发生")
 8 #这里为什么没有读出来呢,是因为光标在写入内容的时候已经跳到文件的末尾,所以读不出来内容
 9 #我们之所以能读成内容,是因为我们首次打开文件的时候,光标是在文件的开头
10 print("new content: ",f.read())
file_read+

   7)文件的其它函数

 1 # 在GBK编码中,一个汉字代表两个字节,在utf-8中,一个汉字代表三个字节
 2 # read()读的是字符,例:read(1)
 3 # seek()和tell()读的是字节
 4 # seek()把光标移到什么位置
 5 # tell()获取光标所在位置
 6 # flush()强制把内存的内容写到文件,相当于保存操作
 7 # truncate()
 8 # 1)截断字符,如果没传参数,那么只截取光标位置为0的字符,相当于把内容清空
 9 # 2)如果这样写
10 #   f = open("file.txt","r+",encoding="utf-8")
11 #   f.seek(3)
12 #   f.truncate()
13 #   f.flush()
14 #   #那么truncate会从3字节的位置往左开始截取字符,截取到的字符重新写入原先的文件,原先文件的内容清空
15 # 3)truncate()文件的打开方式必须是读写(r+)
16 # 4)如果truncate(3)传入了参数,那么它是从光标0开始截,截取指定的字符数,并把原先的文件删除掉,在重新往里面写入截取到的字符
17 f = open("破阵子.txt","r+",encoding="gbk")
18 #移动到字节2的后面,再读取一个字
19 print(f.tell())
20 f.seek(2)
21 print(f.tell())
22 f.truncate()
23 f.flush()
24 f.close()
file_def

 

posted on 2018-01-01 14:55  这个馒头有点小  阅读(338)  评论(0)    收藏  举报