文件操作一:文件操作01):文件读取:(r 只读)
001):我们先在当前文件夹内创建txt文件取名为123,在其中添加几句话内容。        f 称之为文件句柄,控制着 123 这个文本文档
        f=open(",mode="r",encoding="utf-8")
        print(f.read()) -->读取文本的全部内容
        content=f.read(4)  #读取文本中的前4个数据
        print(content)
        content=f.readline()  #读取第一行数据
        content=f.readlines() #读取全部内容,返回的结果是列表。而且是有换行符  \n
        打印例子:['哎呦喂,客官今天吃点啥嘞\n', '来个烤猪蹄吧\n', '烤猪蹄卖完']
        可以用 strip()去掉空格和换行符
    002:)无限循环案例:
    f=open(",mode="r",encoding="utf-8")
        while 1:   #while 1  会执行无限循环,当起循环完文件中内容后,就不段循环换行符,所以后面出现很多空白
        count=f.readline()
        print(count)
    003):绝对路径和相对路径的问题           1. 绝对路径(当文件路径是固定的时候)
           从磁盘根目录找文件。  windows下用的就是c,d,e,f, linux: \user\bin\xxxx
                  比如 :D:\BaiduNetdiskDownload\旺财的粮食\第一天的吃的食物.txt
       2. 相对路径(用的多)
            相对路径相对于当前程序所在的文件夹
                 ../ 表示上一层文件夹

                 \n \t 转义字符。 有固定的含义的。 推荐用r
               rD:\BaiduNetdiskDownload\旺财的粮食\第一天的吃的食物.txt
    004):文件句柄:f
       文件句柄是可以迭代的,例如:
          f=open(",mode="r",encoding="utf-8")
          for i in f:      #读取文中的文内容,一行一行的读取。每读取一次将值交给前面的变量i
              print(i)
          打印结果是有换行和空格的,但是可以用.strip 去掉换行和空格
02):文件写入(只写w)
    !!!!!重点重点重点!!!!!!会清空全文件的内容
  001):w 写步骤 : 先清空原文件的所有内容,再写入
     f=open(",mode="w",encoding="utf-8")
        f.write("哎呦,打尖还是住店呀!")
        f.close()    #从文件中可以看到,多了一个名为 456  的文本文件,
                      而且文本文中还是有内容的!
        #f.write("6789\n")  \n  将写入的内容增加在下一行
    002):文本文件的复制
     f1=open(r",mode="r",encoding="utf-8") #r 是为了去掉换行
        f2=open(r",mode="w",encoding="utf-8")  #w会将123  里面的内容先清空  再执行后面的语句
        for i in f1:
            f2.write(i)  #将f1 文件里面的内容一行一行迭代,每迭代一次就将内容复制给f2
        print(f1,f2)   #  执行这条操作后,两个文件的内容会完全一样
        #在执行上面操作时候,发现f1 和f2 的内容一模一样了。
03):b(bytes)
(b  读取是字节,用来操作非文本文字,像视频,图片等)

有 rb(读取非文本的内容)  wb(写非文本的内容)   ab (增加非文本内容)
     实际操练:将d盘的图片 复制到f盘
     操作代码:
     #将D盘的   哈哈哈.jpg    图片复制到f盘中
     f1=open(r"D:\哈哈哈.jpg",mode="rb")
     f2=open(r"E:\哈哈哈.jpg",mode="wb")
     for i in f1:    #分批量的读取数据
         f2.write(i)    # open()出来的结果可以使用read或者write. 根据mode来看
                                #将循环出来的内容i  复制给f2
     f1.close()
     f2.close()
04):读写操作( r+ )  + 是代表是扩展的意思(其他:w+  写读操作,a+ 追加写读操作)    例子:    001):r+()读写操作    #读写操作要先 读取,在写入内容(写入的内容会在文本最末端)
    正确例子:
       f=open(",mode="r+",encoding="utf-8")
       f1=f.read()       #必须是先读取,再写入,不然会覆盖原本文档里面的内容
       f.write("哎呦喂")
       print(f1)
       #结果是  我们在读取后,只会显示999这个文件的里面的内容,后面增加的内容没有被打印出来!
    

错误例子:
       f=open(",mode="r+",encoding="utf-8")
       f.write("哎呦喂")
       content=f.read()
       print(content)  #执行程序后  原文件999  的文件里面的前几个数据被“哎呦喂” 给覆盖了
       所以必须要先读取,再写入才行!
     r+不论你怎么读取,先读后再写入,增加的内容都是在文本的最末位
        f=open(",mode="r+",encoding="utf-8")
        count=f.read()
        f.write("zhnedea")
        print(count)
        #可以到999的文本文件,读取答应出来的是文本的原来的内容,但是去999的文件看下,可以看到文本文件
        最后面增加了我们写入的文件   "zhendea"

错误例子


     002):w+ 写读 (一定要记住 w 会先清空原来内容然后再写入,牢记呀)

f=open(",mode="w+",encoding="utf-8")
        f.write("这个是增加的内容")
        count=f.read()
        print(count)   #去999文本文件看,原文件被清空了,只有新增加的内容!
        f.close()
    003):a+(追加读写)
    不论光标在何处,写入的时候都是在末尾。(按键盘上上 insert  光标就出来了 )
        f=open(",mode="a+",encoding="utf-8")
        f.write("hahahah")
        f.write("hhdjfhadhfidanf")
        count=f.read()
        print(count)
        #解释:不论光标在何处,写入的时候都在末尾,(末尾指的是:光标在原内容的最后面,不是在增加后的内容的最后面)
05):修改⽂件以及另⼀种打开⽂件的⽅式 
    ⽂件修改: 只能将⽂件中的内容读取到内存中, 将信息修改完毕, 然后将源⽂件删除, 将新
    ⽂件的名字改成老⽂件的名字
    

# ⽂件修改import os
with open("⼩娃娃", mode="r", encoding="utf-8") as f1,\
open("⼩娃娃_new", mode="w", encoding="UTF-8") as f2:
content = f1.read()
new_content = content.replace("冰糖葫芦", "⼤⽩梨")
f2.write(new_content)
os.remove("⼩娃娃") # 删除源⽂件
os.rename("⼩娃娃_new", "⼩娃娃") # 重命名新⽂

文件修改案例

弊端: ⼀次将所有内容进⾏读取. 内存溢出. 解决⽅案: ⼀⾏⼀⾏的读取和操作 
 import os
 with open("⼩娃娃", mode="r", encoding="utf-8") as f1,\
 open("⼩娃娃_new", mode="w", encoding="UTF-8") as f2:
 for line in f1:
 new_line = line.replace("⼤⽩梨", "冰糖葫芦")
 f2.write(new_line)
 os.remove("⼩娃娃") # 删除源⽂件
 os.rename("⼩娃娃_new", "⼩娃娃") # 重命名新⽂件

解决方案

												

python学习之路---day008的更多相关文章

  1. python学习之路-day2-pyth基础2

    一.        模块初识 Python的强大之处在于他有非常丰富和强大的标准库和第三方库,第三方库存放位置:site-packages sys模块简介 导入模块 import sys 3 sys模 ...

  2. Python学习之路-Day2-Python基础3

    Python学习之路第三天 学习内容: 1.文件操作 2.字符转编码操作 3.函数介绍 4.递归 5.函数式编程 1.文件操作 打印到屏幕 最简单的输出方法是用print语句,你可以给它传递零个或多个 ...

  3. Python学习之路-Day2-Python基础2

    Python学习之路第二天 学习内容: 1.模块初识 2.pyc是什么 3.python数据类型 4.数据运算 5.bytes/str之别 6.列表 7.元组 8.字典 9.字符串常用操作 1.模块初 ...

  4. Python学习之路-Day1-Python基础

    学习python的过程: 在茫茫的编程语言中我选择了python,因为感觉python很强大,能用到很多领域.我自己也学过一些编程语言,比如:C,java,php,html,css等.但是我感觉自己都 ...

  5. python学习之路网络编程篇(第四篇)

    python学习之路网络编程篇(第四篇) 内容待补充

  6. Python学习之路【第一篇】-Python简介和基础入门

    1.Python简介 1.1 Python是什么 相信混迹IT界的很多朋友都知道,Python是近年来最火的一个热点,没有之一.从性质上来讲它和我们熟知的C.java.php等没有什么本质的区别,也是 ...

  7. python 学习之路开始了

    python 学习之路开始了.....记录点点滴滴....

  8. python学习之路,2018.8.9

    python学习之路,2018.8.9, 学习是一个长期坚持的过程,加油吧,少年!

  9. Python学习之路——pycharm的第一个项目

    Python学习之路——pycharm的第一个项目 简介: 上文中已经介绍如何安装Pycharm已经环境变量的配置.现在软件已经安装成功,现在就开始动手做第一个Python项目.第一个“Hello W ...

随机推荐

  1. hdu6188 Duizi and Shunzi (贪心或者dp)

    题意 有n张牌,第i张牌上的数字是a[i].我们定义 两张数字是一样的牌 为对子.我们定义 三张数字连续的牌 为顺子.我们想把这n张牌组成尽可能多的顺子和对子.请计算并输出能组成的最多的顺子和对子的数 ...

  2. 面试题:Java程序员最常用的20%技术 已看1

    首先常用api(String,StringBuffer/StringBuilder等) 1.集合类,线程类 2.Servlet(很少用纯粹的servlet写,但你要懂,因为很多框架都是基于servle ...

  3. JavaScript——Dom编程(1)

    DOM:Document Object Model(文本对象模型) D:文档 – html 文档 或 xml 文档O:对象 – document 对象的属性和方法M:模型 DOM 是针对xml(htm ...

  4. [GO]冒泡排序的原理和代码实现

    冒泡排序的原理:对于一个数组里所有的元素进行两两比较,发生大于则变换数组下标则为升序排序,发生小于则变换数据下标的则为降序排序 比如给定的数组为[1, -2, 3, -4],对于我们的需求,两两比较后 ...

  5. C# 操作Excel基础篇(读取Excel、写入Excel)

    注意事项:Excel的数据表中最多只能储存65535行数据,超出后,需要将数据分割开来进行储存.同时对于Excel中的乱码象限,是由于编码的错误方式导致引起的! 一.读取Excel数据表,获得Data ...

  6. java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V

    异常完整信息 严重: Servlet.service() for servlet RegServlet threw exception java.lang.NoSuchMethodError: org ...

  7. Entity Framework 6 初体验

    Entity Framework中有三种模式 Code First, Model First和Database First, Code First 是在EF4中新增的模式, 也跟NHibernate等 ...

  8. DB2 函数快速构造测试数据

    函数快速构造测试数据 [案例]使用DB2内置函数快速构造测试数据 无论您是在用原型证明某一概念,还是开发一个全新的应用程序,或者只是学习 SQL,您都需要在您的应用程序上运行测试数据.为了有效地测试应 ...

  9. 【转】Android自定义控件(二)——有弹性的ScrollView

    原文地址:http://blog.csdn.net/a105865708/article/details/17784041 实现了当手指滑动到ScrollView的顶部.底部时, 可以继续的向上.向下 ...

  10. C#中线程的委托

    很多时候写windows程序都需要结合多线程,在C#中用如下得代码来创建并启动一个新的线程. Thread thread = new Thread(new ThreadStart(ThreadProc ...