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:#比较友好,能够不关闭文件,它自动刷新和关闭文件

 

路径

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

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

经常使用操做

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)*spa

seek(0) 光标移动到开头日志

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

seek(0,1)当前光标对象

tell() 告诉光标的位置blog

truncate截断文件

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

2.若是给参数. 从头截断到参数位置utf-8

文件的修改

步骤:

   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)                                        
相关文章
相关标签/搜索