文件操作

一、文件操作

#打开文件: 1.路径(绝对路径、相对路径)。
#         2.编码方式。
#         3.操作方式(只读、只写、读写等)

二、打开方式
  1. w 相关

#  w   w+   w+b     写相关
f=open('cimi.txt',mode="w",encoding='gbk')
f.write('abcdefghigklmn')
#只写方式就不能读
f.close()

f=open('cimi.txt',"w+",encoding='gbk')
#写读方式,清空原先的内容,然后写入
f.write('opq')
#此时光标会到最后的位置,所以读不出来
content1=f.read()
print(content1)
#将光标移到首位
f.seek(0)
content1=f.read()
print(content1)
f.close()
#返回opq

f=open('cimi.txt',mode="w+b")
#凡是有b的就不需要加encoding参数了,而且后面会用到encode方法
f.write('rst'.encode('utf-8'))
#同样光标移到最后,需要调整光标位置才可以读
f.seek(0)
content2=f.read()
print(content2)
f.close()
#返回b'rst'
#弊端在于会清除原先的内容

  2. r 相关

#  r   r+   r+b    读相关
f=open('cimi.txt',"r",encoding='utf=8')
#只读方式打开,光标停在首位
content3=f.read()       #读取首位之后全部内容
print(content3)
#可以调整光标位置,读取部分内容
f.seek(1)
content3=f.read()   
print(content3)
f.seek(0)
content3=f.readline()   #readline可以有参数,限制读取行数,返回的是字符串
print(content3)
f.seek(0)
content3=f.readlines()  #readlines很少有参数,返回的是一个列表,列表中元素是每一行字符组成的字符串
print(content3)
f.close()
#返回
# rst
# st
# rst
# ['rst']

  3. a 相关

#  a   a+   ab      追加写
f=open('cimi.txt',"a",encoding="gbk")
#not readable,在后面写但是不可读,并且每次运行就在后面加写
f.write('\nmicisixili')
f.write('\nkalajahaga')
f.close()

f=open('cimi.txt',"a+",encoding="gbk")
#光标开始位置是最后
f.seek(0)
content4=f.read()
print(content4)
count=f.tell()
print(count)
f.write('\n男儿有胆气,仗剑走天涯')
print(f.tell())
count=f.tell()
f.seek(count-10)
#打开方式是gbk,一个中文两个字节,如果打开方式是utf-8,就是一个中文三个字节
content4=f.read()
print(content4)
f.close()
# 打印
# rst
# micisixili
# kalajahaga
# 123
# 147
# 仗剑走天涯

f=open('cimi.txt',mode="a+b")
f.write('cccc'.encode('gbk'))
print('----')
count=f.tell()
f.seek(count-50)
content5=f.read()
print(content5)
f.seek(count-50)
listc=f.readlines()
print(listc)
f.close
# ----
# b'micisixili\r\nkalajahaga\r\n\xc4\xd0\xb6\xf9\xd3\xd0\xb5\xa8\xc6\xf8\xa3\xac\xd5\xcc\xbd\xa3\xd7\xdf\xcc\xec\xd1\xc4cccc'
# [b'micisixili\r\n', b'kalajahaga\r\n', b'\xc4\xd0\xb6\xf9\xd3\xd0\xb5\xa8\xc6\xf8\xa3\xac\xd5\xcc\xbd\xa3\xd7\xdf\xcc\xec\xd1\xc4cccc']

  4.示例

f=open('cimi.txt',"r+",encoding='gbk')
f.write('qm')
#是从光标位置开始,向后覆盖
content6=f.read()
print(content6)
f.seek(0)
for i in f:
    print(i,end='')
print('-----')
f.seek(0)
f.truncate(10)
content6=f.read()
print(content6)
f.close()
# 打印
# t
# micis
# micisixili
# kalajahaga
# 男儿有胆气,仗剑走天涯cccc
# qmt
# micis
# micisixili
# kalajahaga
# 男儿有胆气,仗剑走天涯cccc-----
# qmt
# micis
#方法
# f.write('内容')
# f.seek(参数)     按照字节定光标
# f.tell()        获取当前文件指针的位置
# f.read(参数)     可以限制读的内容
# f.readline()    读一行,可以把光标调到第二行
# f.readlines()   形成列表,每一行的字符串作为一个元素
# f.truncate()    有返回值,参数可写,对源文件进行截取,其他的内容删掉可以配合seek使用

 

三、高级方式

with open('cimi.txt',"r+",encoding='gbk') as f:
#读写方式,必须是已经存在的文件
    f.write('cv')
    print(f.read())
#不需要关闭,自动关闭

#两个文件一起操作
with open('cimi.txt',"a+",encoding='gbk') as f1,\
    open('test.txt',"r+",encoding='gbk') as f2:
    contentc=f2.read()
    print(contentc)
    print('------')
    f1.seek(0)
    contentz=f1.read()
    print(contentz)
# 
# ll
# micis
# cill
# ------
# cvll
# micis

 

#文件操作注释
#文件操作中,最好不要又度又写,文件指针会乱。一定要注意。最好只r,w,a。
#编码方式最好是utf-8,标准规范的统一编码方式。
#readline不常用。视频文件基本都是一行一行,但是不可以一行一行读。应该先变成bytes,再按照字节读。
#readlines。
#for 循环就是最好的方法。

#with open 通过操作系统对文件进行修改。open函数里的参数,默认mode为r, encoding为unicode
#所有windows文件都是gbk编码

f=open('cici.txt',"w")
f.write("mo\nsaf\nfds")
f.close()

#修改文件
with open('cici.txt',encoding='utf-8')as f,open('cici.bak',encoding='utf-8')as f2: 
    for line in f :
        if 'saf' in line:
            line=line.replace('saf','salary')
        f2.write(line)
        #无论修改与否,都会在拷贝文件中写入Line的内容
#删除文件
import os
os.remove('cici.txt')
os.rename('cici.bak','cici.txt')
    #就是删除源文件之后,修改现在文件的名字

 

 

 

 

 

 

 

 

  

posted @ 2019-05-31 21:29  玉石非玉  阅读(171)  评论(0编辑  收藏  举报