文件操作

一.文件操作的基本流程

# 绝对路径
f = open('d:\文件.txt', mode='r', encoding="utf-8")  # 打开文件,内容('文件路径',打开模式,编码方式)
a = f.read()  # 对文件进行的操作
print(a)
f.close()    # 关闭程序

# 相对路径
f = open('文件操作', mode='r', encoding="utf-8")
a = f.read()
print(a)
f.close()

二.文件的打开模式

1. 打开文件的模式有(默认为文本模式):

r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】


w,只写模式【不可读;不存在则创建;存在则清空内容】

#    a :阿瑟东阿萨斯法
f = open('a', mode='w', encoding='utf-8')
content = f.write('as')

#    a:as

 


a, 只追加写模式【不可读;不存在则创建;存在则只追加内容】

#    a:阿瑟东阿萨斯法as

f = open('a', mode='a', encoding='utf-8')
content = f.write('阿萨大')
f.close()

#    a:阿瑟东阿萨斯法as阿萨大

 

2. 对于非文本文件,我们只能使用b模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式、视频文件的avi格式

rb
wb
ab
注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码 

3,‘+’模式(就是增加了一个功能)

r+, 读写【可读,可写】

w+,写读【可写,可读】

a+, 写读【可写,可读】

4,以bytes类型操作的读写,写读,写读模式

r+b, 读写【可读,可写】
w+b,写读【可写,可读】
a+b, 写读【可写,可读】

三.操作

read  按字符定光标读取

a :阿瑟东阿萨斯法

f = open('a', mode='r', encoding='utf-8')
content = f.read(3)
print(content)
f.close()

#    阿瑟东

 

seek  按字节移动光标(英文一个字符一个字节,中文三个字节一个字符)

#    a :阿瑟东


f = open('a', mode='r+', encoding='utf-8')
f.seek(3)
content = f.read()
print(content)
f.close()

#    瑟东
#    b: abcdefg

f = open('', mode='r+', encoding='utf-8')
f.seek(3)
content = f.read()
print(content)
f.close()

#    defgh

 

tell   获取光标的当前位置

f = open('a', mode='r+', encoding='utf-8')
content = f.tell()
print(content)
f.close()

#输出
    0

 

readline  读第一行

 

#a
我曾经跨过山和大海 也穿过人山人海
我曾经拥有着的一切 转眼都飘散如烟

f = open('a', mode='r', encoding='utf-8')        
content = f.readline()                           
print(content)                                   
f.close()     

# 
我曾经跨过山和大海 也穿过人山人海                                  

 

readlines  每一行当当成列表中的一个元素,然后添加到列表

#a:我曾经跨过山和大海 也穿过人山人海
我曾经拥有着的一切 转眼都飘散如烟

f = open('a', mode='r', encoding='utf-8')
content = f.readlines()                  
print(content)                           
f.close()           


#输出
['我曾经跨过山和大海 也穿过人山人海\n', '我曾经拥有着的一切 转眼都飘散如烟']          

 

truncate  截取

#    b: abcdefg


f = open('b', mode='r+', encoding='utf-8')
f.truncate(3)
content = f.read()
print(content)
f.close()

#输出
    abc

 

for line in f 将文件里的内容一行一行的输出 

#a:我曾经跨过山和大海 也穿过人山人海
我曾经拥有着的一切 转眼都飘散如烟


f = open('a', mode='r', encoding='utf-8')   
for line in f:                              
    print(line)                             
f.close()          

#输出
  我曾经跨过山和大海 也穿过人山人海

我曾经拥有着的一切 转眼都飘散如烟

 

with open  不用close

with open('a', mode='r+', encoding='utf-8') as f, open('b', mode='r+', encoding='utf-8')as f1:
content = f.readlines()
content1 = f1.write('哈哈ha')
print(content, content1)

修改文件

文件不能修改,但是可以创建一个新文件,改变内容后再代替原文件

#a
你曾经跨过山和大海 也穿过人山人海
你曾经拥有着的一切 转眼都飘散如烟
你曾经失落失望 失掉所有方向
直到看见平凡 才是唯一的答案  

with open('a', 'r', encoding='utf-8')as f1,open('修改后文件.bak', 'w', encoding='utf-8')as f2:     
    for lin in f1:                                                                            
        if ''in lin:                                                                         
            lin = lin.replace('','')                                                        
        f2.write(lin)                                                                         
import os                                                                                     
os.remove("a")                                                                                
os.rename('修改后文件.bak', 'a')  


#输出
我曾经跨过山和大海 也穿过人山人海
我曾经拥有着的一切 转眼都飘散如烟
我曾经失落失望 失掉所有方向
直到看见平凡 才是唯一的答案                                                                 

 

 

 

posted @ 2018-08-04 23:16  albatorss  阅读(143)  评论(0)    收藏  举报