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

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)

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()方法

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

逐行读取readline()方法

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

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

#readlines()方法用于读取所有行并返回列表。

#fileobject.readlines(size),size为从文件中读取的字符数

fy=open(r'G:\newtest.txt')
print("文件名称为:",fy.name)
line=fy.readlines()
print("读取的文本数据为:%s" % line)
fy.close()

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

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

截断文件truncate()方法

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

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

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

写入文件

write()

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

writelines()

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

修改文件内容

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

附加到文件

#创建一个文本文件test7.txt,并写入内容"煮豆燃豆萁,豆在釜中泣"
ff=open(r'G:\file\test7.txt','w')
st="煮豆燃豆萁,豆在釜中泣。"
'''
用户可以将一个文件的内容全部附加到另一个文件中。
''' ff.write(st)
ff.close() #创建一个文本文件test8.txt,并写入内容"本是同根生,相煎何太急?"
ss=open(r'G:\file\test8.txt','w')
tt="本是同根生,相煎何太急?"
ss.write(tt)
ss.close() #这里将test8的内容先赋值给变量content
file=open(r'G:\file\test8.txt','r')
coutent = file.read()
file.close()
#然后以追加模式打开test7.txt文件,将变量coutent
fileadd=open(r'G:\file\test7.txt','a')
fileadd.write(coutent)
fileadd.close()
#读取test7.txt的文本内容
file7=open(r'G:\file\test7.txt')
print("test7.txt文本内容:",file7.read())
file7.close()

关闭文件

close()方法用于关闭一个已经打开的文件。关闭后的文件不可以在进行读写操作, 否则会触发ValueError错误。close()方法允许调用多次。 fileobject.close()

当file对象被引用到操作另一个文件时,Python会自动关闭之前的file对象。

刷新文件

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

    题解: t1: 想了一会才会.. 以为是啥最小表示法之类的..然后这个我又不会 其实只要考虑一下a[i],a[i+1]之间的大小关系就行了 t2: 好像和题解不太一样.. 我的做法比较麻烦.. 枚举A ...

  2. 图解Go里面的sync.Map了解编程语言核心实现源码

    基础筑基 在大多数语言中原始map都不是一个线程安全的数据结构,那如果要在多个线程或者goroutine中对线程进行更改就需要加锁,除了加1个大锁,不同的语言还有不同的优化方式, 像在java和go这 ...

  3. CPP STL学习笔记

    STL的概念 源地址  https://www.ev0l.art/index.php/archives/15/ <li> Iterator (迭代器)<li> Containe ...

  4. Linux下自动化部署ASP.NET CORE 3.1(Docker+Jenkins+Nginx)

    1.先配置好Docker阿里云加速,可以使用阿里云容器服务 (可自己在阿里云申请,要不然安装东西直接很慢)注意:https://XXXX.mirror.aliyuncs.com为阿里云加速服务分配地址 ...

  5. 基于CentOS 7 部署MySQL 5.7的基本操作

    关闭selinux # sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config重启后生效# sestatus 修改提示符配置# vi / ...

  6. KMP 和 扩展KMP

    KMP:在主串S中找子串T的位置KMP算法的时间复杂度O(|S|+|T|). #define maxn 1000 char s[maxn],t[maxn];//s为主串,t为子串 int net[ma ...

  7. EntityFramework Core一劳永逸动态加载模型,我们要知道些什么呢?

    前言 这篇文章源于一位问我的童鞋:在EntityFramework Core中如何动态加载模型呢?在学习EntityFramwork时关于这个问题已有对应园友给出答案,故没有过多研究,虽然最后解决了这 ...

  8. MySQL定时备份(全量备份+增量备份)

    MySQL 定时备份 参考 zone7_ 的 实战-MySQL定时备份系列文章 参考 zmcyu 的 mysql数据库的完整备份.差异备份.增量备份 更多binlog的学习参考马丁传奇的 MySQL的 ...

  9. 【Java基础总结】多线程

    1. 实现多线程的两种方式 //第一种:继承Thread类,重写run()方法 class ThreadTest1 extends Thread{ public void run(){ String ...

  10. JavaScript-null与' '的区别

    null代表的是空对象无地址,而' '则代表的是有地址,但是这个地址里面的内容为空