Python--文件的基本操作

 

#!/usr/bin/env  python
# -*- coding: utf-8 -*-
# ******************************一:文件的操作******************************
# 1. 打开文件,得到文件句柄并赋值给一个变量
# 2. 通过句柄对文件进行操作
# 3. 关闭文件
# 注意:open()一个文件也就是创建了一个对象,把这个对象赋值给变量f,这样变量f文件之间就建立了引用关系
# f = open("a.txt","r")   #打开文件,得到文件句柄并赋值给一个变量;文件路径可以是绝对路径也可以是相对路径
# data = f.read()                             #通过句柄对文件进行操作
# f.close()                                   #关闭文件

# ******************************二:文件的打开方式******************************
# 1.文件的打开方式(默认为文本模式t):
#               r   以读模式打开文件
#               w   以写模式打开文件;如果文件存在,则清空文件,再写入新内容;如果文件不存在则创建文件
#               a   以追加模式打开文件(打开文件后,文件光标自动跳转到文件末尾),如果文件不存在则创建文件;注意追加模式下只能进行写操作
# f1 = open("f1.txt","r")        #文件不存在则报错
# f1.close()
# f2 = open("f2.txt","w")        #文件不存在则创建
# f2.close()
# f3 = open("f3.txt","a")        #文件不存在则创建
# f3.close()

# 2.非文本文件打开方式:只能使用b模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的
# 字符编码、图片文件的jgp格式、视频文件的avi格式)
# 注意:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码
#               b   以二进制模式打开文件,而不是以文本模式
# f = open("a.txt","rb")
# data = f.read()
# f.close()
# print(data)

# 3.读写模式打开文件:
#               r+  以读写方式打开文件,可对文件进行读和写操作
#               w+  清除文件内容,然后以读写方式打开文件
#               a+  以读写方式打开文件,并将文件光标移到到文件末尾

# ******************************三:文件的读和写******************************
# 1.read():读取文件内容,并返回一个字符串
# f = open("a.txt","r",encoding="utf-8")     #以指定的编码格式来编码(打开)文件
# data = f.read()         #读取所有内容,光标移动到文件末尾
# f.seek(0)               #将文件光标移动到开始位置
# data1 = f.read(10)      #read(n),n是字符数,可以指定读取多少个字符
# f.close()
# print(data,data1)

# f1 = open("a.txt","rb")     #b模式下读文件;注意:win操作系统下换行符是:\r\n
# data2 = f1.read()
# f1.close()
# print(data2)
# print(data2.decode("utf-8"))    #b模式下查看文件内容,将字节解码为字符串查看

# 注意:字符串(内存)------编码encode------字节(硬盘)
# 字节(硬盘) ------解码decode------字符串(内存)

# 2.readable():文件是否是可读的,返回布尔值
# f = open("a.txt","r",encoding="utf-8")
# data = f.readable()
# f.close()
# print(data)

# 3.readline():读取一行内容,光标移动到第二行开始
# f = open("a.txt","r",encoding="utf-8")
# data = f.readline()             #读取一行内容,光标移动到第二行开始
# data1 = f.readline(4)           #readline(n),n是字符数,可以指定读取该行多少个字符
# f.close()
# print(data)
# print(data1)

# 4.readlines():读取文件中每一行内容,将结果返回一个列表
# f = open("a.txt","r",encoding="utf-8")
# data = f.readlines()
# f.close()
# print(data)

# 5.write():以字符串的形式写入内容;写入内容时不会添加换行符,需要手动添加
# f = open("a.txt","w",encoding="utf-8")
# f.write("1111111111\n222\n333\n中国\n")
# f.close()

# f1=open("b.txt","wb")
# #字符串的encode()方法:将字符串编码为字节
# f1.write("1111\n222\n".encode('utf-8'))      #b模式中的写,需要指定编码格式,将字符串转换为字节写入;字符串需要手动添加换行符
# #bytes函数:将字符串编码为字节
# f1.write(bytes("11112222\n",encoding ="utf-8"))
# f1.close()

# 注意:字符串(内存)------编码encode------字节(硬盘)
# 字节(硬盘) ------解码decode------字符串(内存)

# 6.writeable():文件是否是可写的,返回布尔值
# f = open("a.txt","w",encoding="utf-8")
# f.writable()
# f.close()


# 7.writelines():以列表的形式写入内容;列表元素需要手动添加换行符
# f = open("a.txt","w",encoding="utf-8")
# f.writelines(["111\n","中国\n"])
# f.close()


# 8.closed():文件是否是关闭的,返回布尔值
# f = open("a.txt","w",encoding="utf-8")
# data = f.closed
# f.close()
# print(data)

# ******************************四:文件内光标移动******************************
# 光标移动:文件的读和写操作都会使得光标进行移动,比如你read()完文件后,再次read()会获取不到文件内容,因为文件的光标已经在第一次read()时移动到文件末尾了
# 注意1:除了read(n)方法光标是以字符进行的,其余的文件内光标移动都是以字节为单位如seek,tell,truncate
#           read(3):文件打开方式为文本模式时,代表读取3个字符;文件打开方式为b模式时,代表读取3个字节
# 注意2:文本文件在不同操作系统中换行符是不一样的,python再次处理时会将不同的换行符转换为\n,使用newline=""可以显示不转换前的换行符;
#       在tell()时,换行符\r\n为两个字节
# f = open("test.txt", "r+", encoding="utf-8")
# print(f.readlines())
# f1 = open("test.txt", "r+", encoding="utf-8",newline="")
# print(f1.readlines())

# 1.tell():查看文件当前光标的位置(以字节为单位)
# f = open("a.txt", "r+", encoding="utf-8")
# print(f.tell())
# f.readline()
# print(f.tell())

# 2.seek():控制光标移动字节数
#             seek(a,b)     a控制移动的字节数,b = 0(默认为0),表示从文件开头开始计算移动
#                                            b = 1,表示从当前光标开始计算移动,此时a为正数表示向后移动;反之则向前移动
#                                            b = 2,表示从文件末尾开始计算移动
# 注意:只有在b模式下,seek()才可以从后向前开始向前移动
# f = open("test.txt", "rb")
# print(f.tell())
# f.readlines()
# f.seek(-5,2)
# print(f.tell())

# ******************************五:文件的其他注意事项******************************
# 1.文件的打开方式有两种:
# (1).将硬盘存放的该文件的内容全部加载到内存,在内存中是可以修改的,修改完毕后,再由内存覆盖到硬盘(word,vim,nodpad++等编辑器)
# (2).将硬盘存放的该文件的内容一行一行地读入内存,修改完毕就写入新文件,最后用新文件覆盖原来的文件
# 注意:1.以文本模式打开文本文件时,注意要以指定的编码格式来打开文件,该编码格式应该与该文件在内存中加载的编码格式一致
# 注意:2.open()函数会检索当前操作系统的编码方式,而不是文件自身的编码方式;open()打开文件默认是r模式
# 注意:3.读和写文件的内容必须都是字符串

# 2.encoding:取文件打开的编码
# f = open("a.txt","w",encoding="utf-8")
# print(f.encoding)

# 3.flush():用来刷新缓冲区的,即将缓冲区中的数据立刻写入文件,同时清空缓冲区;
# 一般情况下,文件关闭后会自动刷新缓冲区,但有时你需要在关闭前刷新它,这时就可以使用 flush() 方法;
# 即就是更改文件内容后,先关闭文件再重新打开文件文件更改才会看到变换
# f = open("f3.txt","w+",encoding="utf-8")
# f.writelines(["我爱你中国\n","66666\n"])
# f.flush()
# f.close()

# 4.truncate():文件的截断(写模式进行);无n表示从当前位置截断;截断之后后面的所有字节被删除
# f1 = open("a1.txt","r+",encoding="utf-8")
# f1.truncate(3)       #truncate(n),从文件的首行首字节开始截断n个字节,只要截取部分,其他部分所有字节被删除
# print("a1:",f1.read())
# f1.close()
#
# f2 = open("a2.txt","r+",encoding="utf-8")
# f2.seek(8)
# f2.truncate()       #截断从开头到当前光标位置的内容
# print("a2:",f2.read())
# f2.close()

# 5.with打开文件时,可以不关闭文件
# with open("test.txt","a+",encoding="utf-8") as f:
#     f.write("world\n")
#     print(f.read())
文件

 

posted @ 2019-11-10 01:43  青隅  阅读(177)  评论(0编辑  收藏  举报