Day2-Python3基础-文件操作

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)
View Code

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())
View Code

      逐行读取readline()方法

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

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

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

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

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

       返回文件的当前位置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()
View Code

      截断文件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()
View Code
#用户也可以指定需要截断的字符数
fu=open(r'G:\newtest3.txt','r+')
print("文件名称为:",fu.name)
fu.truncate(6)#截断6字符
line1=fu.read()
print("当前文本数据为:%s" % (line1))
fu.close()
View Code

    设置文件当前位置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()
View Code

    写入文件

    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()
View Code
#如果用户需要换行输入内容,可以使用"\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()
View Code

   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()
View Code

     修改文件内容

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()))
View Code

     附加到文件

#创建一个文本文件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()
View Code

      关闭文件

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

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

     刷新文件

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

 

posted @ 2018-10-21 00:24  Mr_Yun  阅读(179)  评论(0编辑  收藏  举报