文本文档的读写
1.文件指针的获取
'''
读取文本文档(文件后缀名是.txt)中内容
读取文件的时候有一个文件指针的概念,默认文件指针在文件左上角,为0 tall获取文本指针
open方法第一个参数是需要读取的文本内容,第二个参数是打开文件的方式,
open方法开开文件操作完毕之后要调用close方法关闭
打开的文本方式:
r:只读模式 默认其实就是只读模式,可以省略不写
'''
# 打开文件
f = open("1.txt", "r")
#输出文件指针
print(f.tell())
#读取五个字符
info = f.read(5)
print(info)
#输出文件指针
print(f.tell())
# 关闭文件
f.close()
2.移动文件指针
'''
移动文件指针
'''
# 打开文件
f = open("1.txt", "r")
#移动文件指针
f.seek(5)
#输出文件指针
print(f.tell())
#读取五个字符
info = f.read(5)
print(info)
#输出文件指针
print(f.tell())
# 关闭文件
f.close()
'''
seek有三种模式:
默认值为0:表示从哪一个位置开始偏移,0代表从头开始算起
1模式:代表从当前位置开始算起,
2模式代表从文件末尾算起
ps:seek如果采用0模式,这里打开文件方式不用改变,如果是1、2模式需要视同 rb
'''
# 打开文件
f = open("1.txt", "rb")
#输出文件指针
print(f.tell())
#读取五个字符
info = f.read(5)
print(info)
#输出文件指针
print(f.tell())
#第偏移量,第二个模式,
f.seek(1, 1)
print(f.tell())
print(f.read())
# 关闭文件
f.close()
'''
seek有三种模式:
默认值为0:表示从哪一个位置开始偏移,0代表从头开始算起
1模式:代表从当前位置开始算起,
2模式代表从文件末尾算起
ps:seek如果采用0模式,这里打开文件方式不用改变,如果是1、2模式需要视同 rb
注意打开文件的方式现在是二进制了,字符编码所占的长度时不一样的
如果使用gbk方式打开 汉字是两个字节占一个字
如果使用utf-8,则是三个字节占一个字
'''
# 打开文件
f = open("1.txt", "rb")
# 只有20个字母,然后不是换行和回车总共加起来22 为了会读出来27
# 如果第一个参数有写的是正数 还是从左往右移动的,如果想倒着移动写负数
f.seek(-5, 2)
print(f.tell())
#上面倒着移动5个,在向后读取3个字符
print(f.read(3))
print(f.tell())
# 关闭文件
f.close()
3、read
'''
read() 如果指定个数,那么就是读取指定的数字
如果不指定,则是读取整个字符串中所有内容
PS:在Windows操作系统中 虽然只有一个换行其实包括两个操作是 回车+换行
'''
# 打开文件
f = open("1.txt", "r")
#读取五个字符
info = f.read()
print(info)
#输出文件指针
print(f.tell())
4、readlines
'''
read() 如果指定个数,那么就是读取指定的数字
如果不指定,则是读取整个字符串中所有内容
PS:在Windows操作系统中 虽然只有一个换行其实包括两个操作是 回车+换行
'''
# 打开文件
f = open("1.txt", "r")
#读取五个字符
# info = f.read()
'''
readlines()也是用来进行读取的,整体是一个列表 只不过读取回来每一个成了列表的一个元素,并且包含了换行符
['helloworld\n', 'hellowoniu\n', 'xiaowang\n', 'xiaoli']
'''
info = f.readlines()
print(info)
#输出文件指针
print(f.tell())
# 关闭文件
f.close()
5.模式
r+
# 给文件中写入内容
'''
常用打开模式:
r 只能读
r+ 可读可写,不会创建不存在的文件,从顶部开始写,会覆盖之前此位置的内容
w+ 可读可写,如果文件存在,则覆盖整个文件,不存在则创建
w 只能写,覆盖整个文件,不存在则创建
a 只能写,从文件底部添加内容 不存在则创建
a+ 可读可写 从文件顶部读取内容 从文件底部添加内容 不存在则创建
write只能写入单个文本
writelines 同时可以将一个列表中的内容写入
'''
# r+模式操作的必然是一个存在的文件,从左上角开始写,会覆盖掉文本内容
# r+模式之所以会覆盖,其实是打开文件的时候文件指针在文件的开头导致的覆盖
f = open('1.txt', 'r+')
print(f.tell())
# 移动文件指针
f.seek(22)
#写入内容
f.write("hahaha")
# names = ["xiaomign", 'xiaozhang', 'tongtong', 'honghong']
# f.writelines(names)
#关闭
f.close()
w模式
# w只能用于写入文件内容,不能用于读取
# 是将原文件中所有内容全部删除,然后再写入内容
f = open('1.txt', 'w')
#写入内容
f.write("hahaha")
#关闭
f.close()
W+
# w+ 可读可写,如果文件存在,则覆盖整个文件,不存在则创建
# 写入的时候,先删除,在写入其实w+就是拥有w的功能之外,增加了读取的功能
f = open('1.txt', 'w+')
#写入内容
f.write("hahaha")
f.seek(0)
#由于在写入的指针在移动,当写入完成hahaha后,在读取的时候,文件指针在末尾就读不出内容
print(f.read())
#关闭
f.close()
a
# a 只能写,从文件底部添加内容 不存在则创建
# a 末尾追加模式
f = open("1.txt", "a")
f.write("xiaoxiao")
f.close()
a+
# a+ 可读可写 从文件顶部读取内容 从文件底部添加内容 不存在则创建
# 如果刚开始就写入的内容,则文件指针在文件末尾,如果要读取,则需要将文件指针启动
f = open("1.txt", "a+")
#写入内容
f.write("\nxiaoxiao")
#启动文件指针
f.seek(0)
#读取内容
print(f.readlines())
f.close()
6、with oepn
'''
with open是这个open的升级版,也是用于读取和写入文件的
相比较而言:
with open 可以同时操作多个文档
with open 会自动调用close方法,不需要我们手写
'''
#将1.txt中的内容读取回来,写入到2.txt
with open("1.txt","r") as f1,open("2.txt",'w') as f2:
#读取出来f1中的内容
f1_list = f1.readlines()
#将读取的f1中内容写入到f2
f2.writelines(f1_list)