Python文件基本操作
文件的读写方法有六种:W,R,A,W+,A+,R+
读模式:
# -*-coding:utf-8 -*-
__author__ = 'xiaojiaxin'
__file_name__ = 'file1'
import time
#文件操作三步走:1.创建;2.操作;3.关闭文件
#文件操作六种模式:r(读模式),w(覆盖写模式),a(追加写模式),r+,w+.a+
f=open('小重山',mode='r',encoding='utf=8') #创建一个文件
r1=f.read() #进行相应的操作
print(r1)
f.close() #关闭文件,将缓存区的数据存入磁盘,如果不自己关,python可以关,但是不可靠
#输出:
# 昨夜寒蛩不住鸣。
# 惊回千里梦,已三更。
# 起来独自绕阶行。
# 人悄悄,帘外月胧明。
# 白首为功名,旧山松竹老,阻归程。
# 欲将心事付瑶琴。
# 知音少,弦断有谁听。
写模式:
f1=open('小重山2',mode='w',encoding='utf-8') #创建文件的时候文件里面内容全部清空
w1=f1.write("wahaha")
print(w1)
f1.fileno()
w2=f1.write("123\n")
print(w2)
time.sleep(50) #放在内存里50秒
f1.close() #关闭文件,将缓存区的数据存入磁盘
#输出:wahaha123 没有空格,没有换行
追加模式a
f2=open("小重山2",mode='a',encoding="utf-8")
a1=f2.write("一二三")
print(a1)
f2.close() #关闭文件,将缓存区的数据存入磁盘
R+模式:
特点:r+模式该怎么读就怎么读,写只能在最后写
# -*-coding:utf-8 -*-
__author__ = 'xiaojiaxin'
__file_name__ = 'rjia_wjia_ajia'
#+模式 R+ w+ a+
#r+模式该怎么读就怎么读,写只能在最后写
f1=open("小重山",mode="r+",encoding="utf-8")
print(f1.readline())
#输出昨夜寒蛩不住鸣。
f1.write("123") #123写到了最末尾
f1.close()
# 昨夜寒蛩不住鸣。
# 惊回千里梦,已三更。
# 起来独自绕阶行。
# 人悄悄,帘外月胧明。
# 白首为功名,旧山松竹老,阻归程。
# 欲将心事付瑶琴。
# 知音少,弦断有谁听。123
W+模式
特点:创建即覆盖清空,光标在开头
#w+
f2=open("小重山2",mode="w+",encoding="utf-8")
print(f2.tell()) #0 因为写模式一创建就清空原有的文件
print(f2.readline()) # 表示读不了
print(f2.tell()) #0
f2.write("123") #123写到了最末尾
print(f2.tell()) #光标在3字节上
f2.seek(0) #把指针移到0位置
print(f2.readline()) #输出123
f2.close()
a+模式
特点:光标在结尾,追加写,读数据需要用seek将指针光标移至前面
#a+
f3=open("小重山3",mode="a+",encoding="utf-8")
print(f3.tell()) #222 光标在结尾处
print(f3.readline()) # 表示读不了
print(f3.tell()) #222
f3.write("123") #123写到了最末尾
print(f3.tell()) #225 光标在结尾处
f3.seek(0) #把指针移到0位置
print(f3.readline()) #输出123
f3.close()
实例:R、R+模式不能修改数据问题:
#final:r 、r+模式不能在中间写或修改数据,只能在最后追加写!不能修改原有的数据
f4=open("小重山4",mode="r+",encoding="utf=8")
counter1=0
for line in f4:
counter1+=1
if counter1==3: #希望在第三行加入别的数据
#line=''.join([line.strip(),'i like it!'])
f4.write("123")
f4.close()
# 昨夜寒蛩不住鸣。
# 惊回千里梦,已三更。
# 起来独自绕阶行。
# 人悄悄,帘外月胧明。
# 白首为功名,旧山松竹老,阻归程。
# 欲将心事付瑶琴。
# 知音少,弦断有谁听。123
怎么解决r+模式不能修改原文件问题:重新建一个文件,不停的拷贝到新文件,进行修改处理
实例: r+模式不能修改原文件的解决办法
# -*-coding:utf-8 -*-
__author__ = 'xiaojiaxin'
__file_name__ = 'modifyfile_inr+'
#把f1的数据写进f2,并且修改第三行数据,加上"i add it "
counter1=0
f2=open("小重山2",mode="w",encoding="utf-8")#小重山是完整的诗
f1=open("小重山",mode="r+",encoding="utf-8")#小重山2为空
for i in f1:
j=i
counter1+=1
if counter1==3:
j=''.join([j.strip(),"i add it",'\n'])
f2.write(j)
print(j)
f1.close()
f2.close()
读操作:
# -*-coding:utf-8 -*-
__author__ = 'xiaojiaxin'
__file_name__ = 'file2'
f=open("小重山",mode="r",encoding="utf-8")
readline1=f.readline() #默认打印出换行符
print(readline1)
# 昨夜寒蛩不住鸣。
#
readline2=f.readline()
print(readline2)
# 惊回千里梦,已三更。
#
print(f.read(5)) #读出5个字符
# 起来独自绕
print(f.readlines(4))
#['阶行。\n', '人悄悄,帘外月胧明。\n']
print(f.readlines()) #变成列表
#['白首为功名,旧山松竹老,阻归程。\n', '欲将心事付瑶琴。\n', '知音少,弦断有谁听。']
f.close()
# 输出:
# 昨夜寒蛩不住鸣。
#
# 惊回千里梦,已三更。
#
# 起来独自绕
#['阶行。\n', '人悄悄,帘外月胧明。\n', '白首为功名,旧山松竹老,阻归程。\n', '欲将心事付瑶琴。\n', '知音少,弦
文件遍历
f2=open("小重山",mode="r",encoding="utf-8")
for i in f2.readlines():
print(i.strip()) #strip去掉字符串首尾的空格
# 昨夜寒蛩不住鸣。
# 惊回千里梦,已三更。
# 起来独自绕阶行。
# 人悄悄,帘外月胧明。
# 白首为功名,旧山松竹老,阻归程。
# 欲将心事付瑶琴。
# 知音少,弦断有谁听。
f2.close()
添加需求:在诗的第六行加一个字符串
#在诗的第六行加一个字符串:
f3=open("小重山",mode="r",encoding="utf-8")
counter=0
for i in f3.readlines():
counter+=1
if counter==6:
i=''.join([i.strip(),"i like it!"]) #尽量不用+,用join方法做字符串拼接
print(i.strip())
f3.close()
# 昨夜寒蛩不住鸣。
# 惊回千里梦,已三更。
# 起来独自绕阶行。
# 人悄悄,帘外月胧明。
# 白首为功名,旧山松竹老,阻归程。
# 欲将心事付瑶琴。i like it!
# 知音少,弦断有谁听。
转载于:https://blog.51cto.com/10777193/2070242