zoukankan      html  css  js  c++  java
  • Python_day08_2018.7.11(文件操作)

    一.初始文件操作

      使用open()函数.打开文件,获取文件句柄,并根据不同的模式进行相应的操作.打开方式的不同,可以进行的操作也是不同的.

     打开⽂文件的⽅方式: r, w, a, r+, w+, a+, rb, wb, ab, r+b, w+b, a+b 默认使⽤用的是r(只读)模式

    二.只读操作( r , rb )

    r :    ----------------------只读模式-------------mode 对应的是类型      encoding 对应的是 编码类型,一般使用 utf-8 模式

    f = open ("宝宝.txt",mode = "r",encoding = "utf-8" )

    content = f.read()

    print(content)

    f.close

    rb:----------------------只读模式(b表示的是bytes)---------------

      读取出来的是bytes类型,!!!!!在 rb 模式下,不能选择encoding类型

    绝对路径: 从磁盘的根目录开始一直都文件名

    相对路径:在同一个文件夹下的文件.

    读取文件的方法:

    1.read()     将文件内容一次性全部提取出来

    f = open("宝宝.txt",mode="r",encoding="utf-8")

    content = f.read()

    print(content)           #一次性全部取出,所以有可能内存溢出

    2.read( n )   读取几个字符,如果再次读取就从当前位置开始读取,不是从头开始读.

    f = open("宝宝.txt",mode= "r",encoding= "utf-8")

    content = f.read(3)

    print (content)

    3.readline()   一次性读取一行数据   !!! 每一行取出的数据最后都有一个回车.

    f = open("宝宝.txt",mode= "r",encoding="utf-8")

    content = f.readline()

    print(content)

    4.readlines()    将每一行作为一个元素添加到一个列表中,类似与将群工部内容一次性读取出来.

    f = open("宝宝.txt",mode="r",encoding="utf-8")

    lst = f.readlines()

    print(lst)

    for line in lst:

    print(line.strip())

    5.循环读写,每次读取一行内容并处理.所以不会出现内存溢出的可能.

    f = open("宝宝.txt",mode = "r",encoding="utf-8")

    for line in f:

    print(line.strip)

    三.写模式( w , wb )   !!!只写模式下.不可以读.

    写的时候如果没有这个文件,则会创建这个.如果存在文件,则将原文件内容删除,然后再写入内容.

    f = open("宝宝.txt",mode="w",encoding="utf-8")

    f.write("金毛狮王")

    f.flush()

    f.close()

    wb模式下:可以指定打开文件的编辑器,但是再写文件的时候必须将字符串转成utf-8

    f = open("宝宝.txt",mode= "w",encoding="utf-8")

    f.writer("金毛狮王".encode("utf-8"))

    f.flush()

    f.close()

    四.追加( a , ab)    a-->append

    追加就是将内容写到原文件的结尾.

    f = open("宝宝.txt",mode= "a",encoding="utf-8")

    f.write("麻花藤")

    f.flush()

    f.close()

    五.读写模式( r ,r+b )

    之前没有任何操作,write 会从头开始进行覆盖

    如果之前进行过其他操作,write就是将内容跟到原文件的末尾.

    f = open("宝宝.txt",mode= "r",encoding="utf-8")

    content = f.read()

    f.write("麻花藤")

    print(content)

    f.flush()

    f.close()

    六.写读( w , w+b )

    先将原来的内容清空--->然后写入--->读取(读取内容为空)

    f = open("宝宝.txt",mode="w+",encoding="utf-8")

    f.write("哈哈")

    content = f.read()

    print(content)

    f.flush()

    f.close()

    七.追加器  a+

      a+ 模式下,无论是先读还是后读,都是读不到数据

    f = open ("宝宝.txt",mode="a+",encoding="utf-8")

    f.write("麻花藤")

    content = f.read()

    print(content)

    f.flush()

    f.close()

    八.其他相关操作

    1.seek( n )  光标移动到第 n 个位置. -----n的单位是byte 字节

    光标移到开头----seek(0)

    光标移到末尾----seek(0,2)     seek(a,b)   b表示光标位置,如果b=0,移到开头,b=1当前位置,b=2光标移到末尾.     a表示在当前位置的偏移量.

    2.tell()   使用tell()获取光标的位置

    九.修改文件

    方法: 将原来的文件内容取出来进行操作修改后,放入另一个文件中.

    将旧文件删除==>将新文件名字修改为原来的名字.

    import os

    with open("吃的", mode="r", encoding="utf-8") as f1, open("吃的_副本", mode="w", encoding="utf-8") as f2:
        
    for line in f1:
    s = line.replace("菜", "肉")
    f2.write(s)
    os.remove("吃的") # 删除文件
    os.rename("吃的_副本", "吃的") # 重命名文件


    # 1,有如下文件,a1.txt,里面的内容为:
    #
    # 老男孩是最好的培训机构,
    # 全心全意为学生服务,
    # 只为学生未来,不为牟利。
    # 我说的都是真的。哈哈
    #
    # 分别完成以下的功能:
    # a,将原文件全部读出来并打印。

    # f = open("a1.txt",mode="r",encoding="utf-8")
    # lst = f.readlines()
    # for line in lst:
    # print(line.strip())

    # b,在原文件后面追加一行内容:信不信由你,反正我信了。

    # f = open("a1.txt",mode="a",encoding="utf-8")
    # f.write(" 信不信由你,反正我信了.")
    # f.flush()
    # f.close()

    # c,将原文件全部读出来,并在后面添加一行内容:信不信由你,反正我信了。

    # f = open("a1.txt",mode="r+",encoding="utf-8")
    # content = f.read()
    # f.write(" 信不信由你,反正我信了.")
    # print(content)

    # d,将原文件全部清空,换成下面的内容:
    #
    # 每天坚持一点,
    # 每天努力一点,
    # 每天多思考一点,
    # 慢慢你会发现,
    # 你的进步越来越大。

    # f = open("a1.txt",mode="w+",encoding="utf-8")
    # f.write("""每天坚持一点,
    # 每天努力一点,
    # 每天多思考一点,
    # 慢慢你会发现,
    # 你的进步越来越大。""")
    # content = f.read()
    # print(content)
    # f.flush()
    # f.close()

    # e,将原文件内容全部读取出来,
    # 并在‘我说的都是真的。哈哈’这一行的前面加一行,‘你们就信吧~’然后将更改之后的新内容,写入到一个新文件:a1.txt。

    # import os
    # with open("a1.txt",mode="r",encoding="utf-8") as f1 ,open("a1的副本.txt",mode="a",encoding="utf-8") as f2:
    # lst = f1.readlines()
    # for line in lst:
    # if line.strip() == "我说的都是真的。哈哈":
    # f2.write("你们就信吧 我说的都是真的。哈哈")
    # else:
    # f2.write(line)
    # os.remove("a1.txt")
    # os.rename("a1的副本.txt","a1.txt")



    # 2,有如下文件,t1.txt,里面的内容为:
    #
    # 葫芦娃,葫芦娃,
    # 一根藤上七个瓜
    # 风吹雨打,都不怕,
    # 啦啦啦啦。
    # 我可以算命,而且算的特别准:
    # 上面的内容你肯定是心里默唱出来的,对不对?哈哈
    #
    # 分别完成下面的功能:
    # a,以r+的模式打开原文件,判断原文件是否可读,是否可写。

    # f =open("t1.txt",mode="r+",encoding="utf-8")
    # print(f.readable())

    # b,以r的模式打开原文件,利用for循环遍历文件句柄。

    # f = open("t1.txt",mode="r",encoding="utf-8")
    # lst = f.readlines()
    # for line in lst:
    # print(line)


    # c,以r的模式打开原文件,以readlines()方法读取出来,并循环遍历
    # readlines(),并分析b,与c 有什么区别?深入理解文件句柄与# readlines()结果的区别。

    # d,以r模式读取‘葫芦娃,’前四个字符。

    # f = open("t1.txt",mode="r",encoding="utf-8")
    # content = f.read(4)
    # print(content)

    # e,以r模式读取第一行内容,并去除此行前后的空格,制表符,换行符。

    # f = open("t1.txt",mode="r",encoding="utf-8")
    # str = f.readline()
    # print(str.strip())

    # f,以r模式打开文件,从‘风吹雨打.....’开始读取,一直读到最后。

    # f = open("t1.txt",mode="r",encoding="utf-8")
    # lst = f.readlines()
    # count = 0
    # while count < len(lst):
    # if count >1:
    # print(lst[count])
    # count += 1
    # else:
    # count += 1

    # g,以a+模式打开文件,先追加一行:‘老男孩教育’然后在从最开始将原内容全部读取出来。

    # f = open("t1.txt",mode="a+",encoding="utf-8")
    # f.write(" 老男孩教育")
    # content = f.read()
    # print(content)
    # f.flush()
    # f.close()
    # f = open("t1.txt",mode="r",encoding="utf-8")
    # for line in f:
    # print(line.strip())

    # h,截取原文件,截取内容:‘葫芦娃,葫芦娃,’

    # f = open("t1.txt",mode="r+",encoding="utf-8")
    # f.truncate(24)



    # 3,文件a.txt内容:每一行内容分别为商品名字,价钱,个数。
    #
    # apple 10 3
    # tesla 100000 1
    # mac 3000 2
    # lenovo 30000 3
    # chicken 10 3
    #
    # 通过代码,将其构建成这种数据类型:
    # [{'name':'apple','price':10,'amount':3},{'name':'tesla','price':1000000,'amount':1}......] 并计算出总价钱。

    # f = open("a.txt",mode="r",encoding="utf-8")
    # lst1 = f.readlines()
    # print(lst1)
    # lst3 = []
    # sum = 0
    # for line in lst1:
    # dic = {}
    # lst2=line.strip().split(" ")
    # sum = sum + int(lst2[1])*int(lst2[2])
    # count = 0
    # while count< len(lst2):
    # if count ==0:
    # dic["name"]=lst2[count]
    # elif count ==1:
    # dic["price"]=lst2[count]
    # else:
    # dic["amount"]=lst2[count]
    # count += 1
    # lst3.append(dic)
    # print(lst3)
    # print(sum)


    # 4,有如下文件:a4.txt
    #
    # alex是老男孩python发起人,创建人。
    # alex其实是人妖。
    # 谁说alex是sb?
    # 你们真逗,alex再牛逼,也掩饰不住资深屌丝的气质。
    #
    # 将文件中所有的alex都替换成大写的SB(文件的改的操作)。

    # f = open("a4.txt",mode="r+",encoding="utf-8")
    # lst = f.readlines()
    # lst2=[]
    # for line in lst:
    # line = line.replace("alex","SB")
    # lst2.append(line)
    # print(lst)
    # print(lst2)



    # import os
    # with open("a4.txt",mode="r",encoding="utf-8") as f1 ,open("a4的副本.txt",mode="a",encoding="utf-8") as f2:
    # s = f1.read()
    # ss =s.replace("alex","SB")
    # f2.write(ss)
    # os.remove("a4.txt")
    # os.rename("a4的副本.txt","a4.txt")


    # 5,文件a5.txt内容(升级题)
    #
    # name:apple price:10 amount:3 year:2012
    # name:tesla price:100000 amount:1 year:2013
    # .......
    #
    # 通过代码,将其构建成这种数据类型:
    # [{'name':'apple','price':10,'amount':3},
    # {'name':'tesla','price':1000000,'amount':1}......]
    # 并计算出总价钱。



    # f = open("a5.txt",mode="r+",encoding="utf-8")
    # lst = f.readlines()
    # lst3 = []
    # sum = 0
    # for line in lst:
    # dic = {}
    # lst1=line.split(" ")
    # lst4 = lst1[1].split(":")
    # lst5 = lst1[2].split(":")
    # sum = sum + int(lst4[1])*int(lst5[1])
    # for el in lst1:
    # lst2=el.split(":")
    # dic[lst2[0]]=lst2[1].strip()
    # lst3.append(dic)
    # print(lst3)
    # print(sum)





    # 6,文件a1.txt内容(升级题)
    #
    # 序号 部门 人数 平均年龄 备注
    # 1 python 30 26 单身狗
    # 2 Linux 26 30 没对象
    # 3 运营部 20 24 女生多
    # .......
    #
    # 通过代码,将其构建成这种数据类型:
    # [{'序号':'1','部门':Python,'人数':30,'平均年龄':26,'备注':'单身狗'},
    # ......]


    # f = open("a6.txt",mode="r+",encoding="utf-8")
    # lst = f.readlines()
    # lst3 = []
    # for line in lst:
    # # print(line)
    # lst1=line.split(" ")
    # lst2 = []
    # dic = {}
    # for el in lst1:
    # if el == "":
    # pass
    # else:
    # lst2.append(el.strip())
    # dic["序号"] = lst2[0]
    # dic["部门"] = lst2[1]
    # dic["人数"] = lst2[2]
    # dic["平均年龄"] = lst2[3]
    # dic["备注"] = lst2[4]
    # lst3.append(dic)
    # print(lst3)


  • 相关阅读:
    【翻译】谈 focus 和 blur 的事件代理
    【翻译】细分域名的优势
    Form窗体的Combobox键值对绑定
    日志
    ajaxload
    c#文件整理程序
    每天工作4小时的程序员
    每年这一天
    转载从交友到社交的个人成长
    旅行的意义
  • 原文地址:https://www.cnblogs.com/kcwxx/p/9295581.html
Copyright © 2011-2022 走看看