python中文件的操作

文件操作函数

open(文件名(或者路径)),mode="模式",encoding="字符集")

close(),每打开一个文件记得要关闭,否则删不掉

flush(),刷新,写,追加后要刷新

f = open("文件名或路径", mode="模式", encoding="UTF-8")
s = f.read()
f.close
with open("文件名", mode="模式", encoding="utf-8") as f:#比较友好,可以不关闭文件,它自动刷新和关闭文件

 

路径

绝对路径:从磁盘的根目录寻找 或者 从互联网上寻找一个路径

相对路径:(用的多). 相对于当前程序所在的文件夹 ../上一层文件夹

常用操作

r:读

f = open("哈哈哈哈哈", mode="r", encoding="UTF-8")
 s = f.read()
 print(s)
 f.close() # 如果没有这句话, 你在下面的程序中如果删除这个文件. 就会报错
for line in f:  # 文件是一个可迭代对象
    print(line.strip()) # 一行一行的处理数据
lst = f.readlines()
print(lst)
f.close()

 

w:写

#带w的. 只要你操作了. 就会清空源文件
#如果文件不存在. 会自动创建文件
f = open("阿西吧", mode="w", encoding="utf-8")
f.write("呀! 养狗了没有?\n")
f.write("养狗四米大")
f.flush()
f.close()

 

a:追加

# 写的时候. 换行需要手动控制换行   \n
 f = open("阿西吧", mode="a", encoding="utf-8")
 f.write("四米大?")
 f.write("四米大")
 f.flush()
 f.close()

 

r+:读写

#r+ 先读后写
f = open("阿西吧", mode="r+", encoding="utf-8")
s = f.read(3) # 读取三个字符
print(s)
f.write("不养了. 送人") # 在末尾写

f.write("葫芦娃")
s = f.read()
print(s)
s = f.read(2)
print(s)
f.write("还有何云伟")
f.close()

 

w+:写读

# w+,先写后读,很少用. 因为会清空文件中的内容
f = open("阿西吧", mode="w+", encoding="utf-8")
f.write("张云雷也要退出德云社") # 写完之后光标在最后. 读取是没有内容的
f.seek(0) # 移动光标, 移动到开头
s = f.read()
print("读取的内容是",s)
f.flush()
f.close()

 

a+:追加读写

f = open("阿西吧", mode="a+", encoding="utf-8")
f.write("我要加入德云社")#清空源文件内容,写入"我要加入德云社"
f.seek(0)                   #移动光标到开头,原因:写入完毕,光标停留在写完最后的位置
s = f.read()         #不移动光标什么都读不出来
print(s)            #我要加入德云社
f.flush()
f.close()                            

rb, wb, ab, r+b, w+b, a+b:非文本文件的读,写,追加,读写,写读,追加读写(b在这里代表bytes)

rb, wb, ab, bytes#如果处理的是非文本文件, mode里如果有b. encoding就不能给了
f = open("c:/pdd.jpg", mode="rb") # 这里不能写encoding
e = open("e:/pdd.jpg", mode="wb")
for line in f: # 从c盘读取 line你是不知道读取了多少数据的
e.write(line)   # 写入到e盘
f.close()
e.flush()
e.close()

常用操作

seek(偏移量, 位置)

光标(seek)*

seek(0) 光标移动到开头

seek(0,2) 光标移动到结尾

seek(0,1)当前光标

tell() 告诉光标的位置

truncate截断文件

1.从文件开头截断到光标位置

2.如果给参数. 从头截断到参数位置

文件的修改

步骤:

   1. 引入os模块

        2. 打开目标文件, r

        3. 打开文件副本, w

        4. 从r中读取内容进行修改. 写入到副本中

        5. 删除源文件

        6. 重命名副本

#将原文件中的'alex'换成'很屌'
import os #引入模块
# with open('a1.txt',mode='r',encoding='utf-8') as f, \
#     open('a1副本.txt',mode='w',encoding='utf-8') as f1:
#     for line in f:
#         line = line.replace("alex", "很屌")
#         f1.write(line)
# os.remove("a1.txt") #删除原文本
# os.rename("a1副本.txt","a1.txt") #将新文本重命名为原文件名
#示例,日志的终极处理方法
import os # 引入模块
lst = []
with open("2018-08-06.log", mode="r", encoding="utf-8") as f:  #这种写法比较友好,不用打close()
    first = f.readline().strip().split(",")       #去除空白,分割','形成列表
    for line in f:                        #循环文件,循环的结果是每一行
        #dic = {} # 每一行一个字典
        # 1,alex,10086,特斯拉
        ls = line.strip().split(",")    #每一行都去除空格,以','分割,形成列表
        for i in range(len(first)):    #不管源文件如何增加内容,这里每次都可以循环到,可以添加到字典中
            dic[first[i]] = ls[i]        #比原来更方便
        lst.append(dic)
print(lst)                                        

  

posted @ 2018-08-06 15:56  张大仙er  阅读(333)  评论(0编辑  收藏  举报