zoukankan      html  css  js  c++  java
  • 文件的操作

    1.文件操作

      使用open()函数来打开一个文件,获取到文件句柄,然后通过文件句柄就可以进行各种各样的操作了.

     2.r(只读)   一次性读完

      设一个变量f , f 叫文件句柄,我们通过这个句柄去操纵这个文件.例如:

    f = open("文件名",mode="r",encoding="utf-8")

    content = f.read()            从文件中读取到数据,交给前面的content.

    print(content)

    f.close()

    rb  读取字节

    f = open("文件名",mode="rb")

    content = f.read()            rb读出来的数据是bytes类型,在rb模式下不能选择encoding字符集.

    print(content)

    f.close()

    绝对路径:从磁盘根据目录寻找文件.

    相对路径:相对于你当前文件所在的位置

      从当前文件夹找到另一个文件夹中的内容

      1.从当前文件夹出去:  ../  表示出去.

    f = open("../文件夹名/文件名",mode= "r",encoding="utf-8")

    content = f.read()

    print(content)

    f.close()

    从当前文件夹向里面走:文件夹名字.

    read(n) 读取n 个字符.

       f = open("文件名",mode= "r",encoding="utf-8")

    c = f.read(2)       read()读取字符

    print(c)

    f.close()

    f = open("文件名",mode="rb")

    content = f.read(3)    这里读的是字节

    print(content)

    f.close()

    readline   一行一行的读取

    f = open("文件名",mode="r",encoding="utf-8")

    c = f.readline()

    print(c)

    f.close()

    换行符:

    strip()可以去掉左右两端的 和空格

    readlines()将每一行形成一个元素,放到一个列表中,一次读完.不建议用.

    f = open("文件名",encoding="utf-8")

    a = f.readlines()

    for line in a:

    print(line)

    f = open("文件名",mode="r",encoding="utf-8")

      for line in f:          直接获取到每一行数据

        print(line)     文件句柄是一个可迭代对象

    f.close()

    f = open("文件名",mode="w",encoding="utf-8")

    f.write("要写的内容")

    f.flush()   刷新管道

    f.close()

    在w模式下,向文件中写入内容,这个时候会删除原文件中的内容,写入新内容.  且在w模式下去读会出错.

    f = open("文件名",mode="wb")

    f.write("金狮子".encode("utf-8")

    f.flush()

    f.close()

    追加 (a,ab)

    在追加模式下,我们写入的内容放在末尾.

    f = open("文件名",mode="a",encoding="utf-8")

    f.write("内容")

    f.flush()

    f.close()

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

    读写模式,先读后写,(正常的用法)

    f = open("文件名",mode="r+",encoding="utf-8")

    content = f.read()

    print(content)                      先去写再去读是正常用法,写的内容会把原文件覆盖.

    f.write("要写的内容")

    f.flush()

    f.close()

    写读(w+,w+b)

    先将所有的内容清空,然后写入,最后读取.但是读取的内容是空的,不常用.

    追加 (a+)a+模式下,不论先读还是后读都是读取不到数据的.

    f = open("文件名",mode="r+",encoding="utf-8")

    content = f.read()       现在光标是在最后

    f.seek(0)                移动光标   光标又重新回到起点

    c = f.read()

    print(content)         f.seek(0) 默认到开头

    print(c)                   f.seek(3)移动的是字节单位,如果是中文移动的必须是3的倍数

       f.seek(0,2)    移动到结尾      括号中的0是表示偏移量,seek的第二个参数表示的是从哪个位置进行偏移,默认是0,表示开头;1表示当前位置;2表示结尾.

    f = open(''文件名",mode="r+",encoding="utf-8")

    f.seek(0,2)

    f.write("需要写的内容")

    f.seek(0)

    f.read()

    f.flush()

    f.close()

    tell()使用tell().可以帮我们获取光标在什位置

    f = open("文件名","r+",encoding="utf-8")

    f.seek(18)

    print(f.tell())

    f.read()

    f.close()

    f = open("文件名","r+",encoding="utf")

    f.seek(9)   

    f.truncate()         如果没有参数根据光标的位置,保留前面的内容,删除后面的内容.

    f,truncate(9)       如果给了参数,会把文件从头到参数之间的内容保留,其他的全部删除.

    f.flush()

    f.close()

    在r+模式下,如果读取内容,不论读取内容多少,光标显示的是多少,在写入或者操作文件的时候都是在结尾进行操作.

    f = open("文件名","r+",encoding="utf-8")

    f.read(2)   2个字符

    print(f.tell())

    f.write("内容")      这样写的内容会在最后

    f.close()

    with open("文件名",mode="r+",encoding="utf-8")as f:
      content = f.read()

        print(content)   这里没有写f.close()    可以不关文件,过一段时间自动关.

    修改文件:

          只能将文件的内容,读取到内存中,将信息修改完毕再放到新的文件里.把新文件重命名.

    import os

    with open("文件名",mode="r",encoding="utf-8")as f,open("新文件名",mode="w",encoding="utf-8")as f1:

      for line in f:

        line = line.replace("修改的内容","新内容")

        f1.write(content)

    os.remove("文件名")

    os.rename("新文件名","文件名")

  • 相关阅读:
    man LVCREATE
    Pyhton---基础---递归
    Python---基础---循环,函数
    Python---基础---dict_tuple_set
    Python---基础---dict和set2
    安卓网络编程学习(1)——java原生网络编程(1)
    使用python爬取B站弹幕和三连
    maven项目整合工具学习
    读阿里巴巴泰山版《java开发手册》总结(2)
    第十三周学习进度
  • 原文地址:https://www.cnblogs.com/fengkun125/p/9157610.html
Copyright © 2011-2022 走看看