今日内容

  • 文件操作

内容详细

1.打开文件

1.open("作业讲解.py",mode="r",encoding="utf-8")

2.文件打开模式

  • r/w/a(只读只写字符串)

  • r+/w+/a+(可读可写)

  • rb/wb/ab(只读只写二进制)

    • 字符串转换成"二进制"

      v="你好"

      data=v.encode("utf-8")

    • 二进制转换成字符串

      v=""

      data=data.decode("utf-8")

  • r+b/w+b/a+b(可读可写二进制)

1.mode=r:

以只读方式打开文件 / 不能写 / 如果文件不存在 则报错

#打开文件
file_object=open("作业讲解.py",mode="r",encoding="utf-8")
#读文件
content=file_object.read()
print(content)
#关闭文件
file_object.close() # mode=r只能读 不能写
file_object.write("dhhd")#文件中写入内容
file_object.close()#关闭文件 将内存中内容保存到存储地
#io.UnsupportedOperation: not writable
2.w:

以只能写方式 打开文件 /不能读 / 写之前内容先被清空 / 文件不存在时候会新建文件

#在写之前先清空文件,一般用于新建文件
#打开文件
file_object=open("file_test.txt",mode="w",encoding="utf-8")
#写内容
file_object.write("测试")
file_object.close()
#"测试" #mode=w 不能读
file_object=open("file_test.txt",mode="w",encoding="utf-8") file_object.write("测试")
content=file_object.read()
print(content)
file_object.close()
#io.UnsupportedOperation: not writable
3.a:

以只能追加方式打开文件 / 文件不存在则新建文件 / 光标永远在内容最后位置

#写入:a,只追加不能读 + 不存在则新建
file_object=open("file_test.txt",mode="a",encoding="utf-8")
file_object.write("你好")
file_object.close()
#测试你好
4.r+:

以可读可写方式打开文件

  • 读:默认光标从0开始读,也可以通过seek调整光标位置,读物完后会改变光标 位置,所以在写之前需要确定光标位置

  • 写:从光标所在的位置开始写,也可以通过seek调整光标位置, 容易覆盖已存在的内容

  • Seek(2): 在写之前改变光标位置 从第二个字节开始

    #文件已经存在的文件内容::"今天要好好学习哦"
    file_object=open("file_test.txt",mode="r+",encoding="utf-8") content=file_object.read()#读取后光标移动到文件最后一个位置
    file_object.seek(3)#改变光标位置 从第三个字节后开始写入
    file_object.write("你好")#第三个字节后的两个字符,(天要)将会被覆盖
    #今你好好好学习哦 file_object.close()
6.w+:
  • 写入时候文件内容先被清空,所以读取时需要调整光标

    file_object=open("file_test.txt",mode="w+",encoding="utf-8")
    
    #在写入之前文件内容就被清空
    content=file_object.read()
    print(content)#打印空 file_object.write("aaaa")
    file_object.seek(0)#在读取之前需要调整光标位置 不然读取不到值
    content1=file_object.read()
    print(content1) file_object.close()
6.a+ :

在之前文件内容上进行追加,打开文件光标就在内容的最后位置

​ 所以读取的时候需要调整光标

file_object=open("file_test.txt",mode="a+",encoding="utf-8")

#在之前文件内容上进行追加,打开文件光标就在内容的最后位置
# 所以读取的时候需要调整光标
file_object.seek(0)
content=file_object.read()#
print(content)#打印空 # file_object.write("aaaa") # file_object.seek(0)#在读取之前需要调整光标位置
# content1=file_object.read()
# print(content1) file_object.close()
7.rb/wb/ab
  • 字符串转换成"二进制"encode

    v="你好"

    data=v.encode("utf-8")

  • 二进制转换成字符串decode

    v="\xe6"

    data=data.decode("utf-8")

    #示例1 w
    f=open("a.txt",mode="w",encoding="utf-8")
    f.write("你好")#传入字符串
    #将“你好” 根据encoding指定的编码转换成二进制:
    #"你好" -->10001010 10001010 10001010 10001010 10001010 10001010
    #将二进制写入到文件中
    f.close() #示例二 wb一般用于图片/音频/视频/未知编码
    f=open("a.txt",mode="wb")#
    #1.wb:把要写入的字符串以二进制方式写入
    data="我好困"
    con=data.encode("utf-8")
    #将写入的字符串按照的utf-8编码转换成二进制
    f.write(con)
    #将二进制内容写入文件
    f.close() #示例三rb
    f=open("a.txt",mode="rb")#
    #直接读取的是二进制数据
    data=f.read()
    data=f.read(1)#表示一个字节
    f.close()
    print(data)#打印十六进制
    new_data=data.decode("utf-8")#二进制转换成字符串
    print(new_data)
7.r+b/w+b/a+b(可读可写二进制)

2.操作

1.读取:

  • read() :从文件当前位置(光标) 开始读取整个文件

  • readline():每次读取一行内容,读取时占用内存较小,适合大文件读取

  • readlines():读取文件所有行(包括换行符,特殊字符会被\转义后存储)存放在一个列表中,每行作为一个元素

  • read(2):读取两个字符,当读取模式以rb 时候 表示两个字节


  • #1.去除空格 file_object=open("file_test.txt",mode="r",encoding="utf-8")
    for line in file_object:
    line=line.strip()
    #去除内容中每一行的换行,不然会读取文本的换行符 并打印到屏幕
    print(line)
    # aaaa
    # hfh
    # jdjf
    # jdjjd
    #2.read 读取全部文件
    
     data=file_object.read()
    print(data)
    print(type(data))
    #aaaa
    #hfh
    #jdjf
    #jdjjd
    #<class 'str'>
    #3.readline()读取一行
    
    data=file_object.readline()
    print(type(data))#<class 'str'>
    while data:#while循环读取 并记录光标位置 直至读完为止
    print(data.strip())
    data=file_object.readline()
    file_object.close()
    #你好 fh
    #jdjf
    #jdjjd
    #4.readlines()读取所以行 
    
    ata=file_object.readlines()#读取所以行 包括换行符
    print(type(data))# <class 'list'>
    print(data)# ['你\\\\\\n好 fh\n', 'jdjf\n', 'jdjjd\n']#特殊字符\被转义
    for line in data:
    print(line)
    # 你\\\n好 fh #print("\n")被打印执行
    #
    # jdjf
    #
    # jdjjd

2.write()

4.seek():调整光标位置

5.tell():获取当前光标的位置

6.flush():强制将内存的内容刷到硬盘文件中

f=open()
while True:
val=input("请输入:")
f.write(val)
f.flush()#如果不写flush 文件将永远不会关闭 所以内容将永远在内存中 不会保存到硬盘
f.close()

7.关闭

f.close()
with open("a.txt",mode="r"encoding="utf-8") as v:
data=v.read()
#文件执行完毕后将自动关闭

8.文件修改:必须全部拿到内存 进行修改,再重新刷进内存

with open("a.txt",mode="r" encoding="utf-8") as v:
data=v.read()
new_data=data.replace()
with open("a.txt",mode="w" encoding="utf-8") as v:
data=v.write(new_data)
#大文件时候
f1=open("a.txt",mode="r",encoding="utf-8")
f2=open("b.txt",mode="w",encoding="utf-8")
for line in f1:
new_line=line.replace("aa","bb")
f2.write(new_line)
f1.close()
f2.close() #3.6之后写法
with open("a.txt",mode="r" encoding="utf-8") as f1,with open("b.txt",mode="w" encoding="utf-8") as f2:
for line in f1:
new_line=line.replace("aa","bb")
f2.write(new_line)

3.练习

  1. 练习1:请将user中的元素根据 _ 连接,并写入 'a1.txt' 的文件
练习1:请将user中的元素根据 _ 连接,并写入 'a1.txt' 的文件
user = ['alex','eric']
con="_".join(user)
file_object=open("gao.txt",mode="w",encoding="utf-8")
file_object.write(con)
file_object.close()
  1. 练习2:请将user中的元素根据 alex|123形式,写入 'a1.txt' 的文件
#练习2:请将user中的元素根据 alex|123形式,并写入 'a1.txt' 的文件
user = [
{'name':'alex','pwd':'123'}, # alex|123
{'name':'eric','pwd':'olbody'}, # eric|olbody
] #方案一 读取value值 然后join拼接 加上换行
# file_object=open("gao.txt",mode="w",encoding="utf-8")
# for ele in user:
# ul="|".join(ele.values())
# file_object.write(ul)
# ##alex|123eric|olbody #没有换行
# # ul = ul + "\n"
# # file_object.write(ul)
# #添加回车
# # alex | 123
# # eric | olbody
# file_object.close() #方案二 占位符实现模式输出
# file_object=open("gao.txt",mode="w",encoding="utf-8")
#
# for ele in user:
# temp="%s|%s\n"%(ele['name'],ele["pwd"],)
# file_object.write(temp)
# file_object.close()

3:请将a1.txt中的文件读取出来并添加到一个列表中

  • 去掉文件内容中读取出来的换行(\n)
  1. 方案一
# 练习3:请将a2.txt中的文件读取出来并添加到一个列表中 ['alex|123','eric|olbody']
file_object=open("gao.txt",mode="r",encoding="utf-8")
data=file_object.read()
file_object.close()
ul=[]
ul.append(data)#data读取出来的字符内容中,包含特殊字符\n 所以会直接放到列表中 ,若直接print(data)则会将”\n”字符串作为一个python语句执行来,所以看不到有\n字符串
print(ul)
print(data)

#去掉换行\n
#方案一 :读取全部内容 然后按照换行来切割
file_object=open("gao.txt",mode="r",encoding="utf-8")
data=file_object.read()
file_object.close()
ul=[]#存放data内容
ul.append(data)
print(ul)#打印data内的全部内容 ['alex|123\neric|olbody\n'] con=data.strip()#去掉字符串两边的换行['alex|123\neric|olbody']
con=con.split("\n")#按照\n切割 list_con=[]
list_con.extend(con)
print(list_con)

D05C82F]1.png)

2.方案二

#方案二 :读取全部内容  一行一行遍历 添加到列表中
result=[]
file_object=open("gao.txt",mode="r",encoding="utf-8")
for line in file_object:
line=line.strip()#去掉每一行换行
result.append((line))
file_object.close()
print(result)

4.总结

  • 文件操作

    • 打开

    • 模式

      • r/w/a(只读只写字符串)

      • r+/w+/a+(可读可写)

      • rb/wb/ab(只读只写二进制)

        • 字符串转换成"二进制"

          v="你好"

          data=v.encode("utf-8")

        • 二进制转换成字符串

          v=""

          data=data.decode("utf-8")

      • r+b/w+b/a+b(可读可写二进制)

    • 操作

        • read():读全部文件
        • read(1):
          1. r:读取一个字符
          2. rb:读取一个字节
        • readline():读取一行
        • readlines():一行一行读取整个文件
      • write

      • seek():调整光标位置

      • tell():获取当前光标的位置

      • flush():强制将内存的内容刷到硬盘文件中

        f=open()
        while True:
        val=input("请输入:")
        f.write(val)
        f.flush()#如果不写flush 文件将永远不会关闭 所以内容将永远在内存中 不会保存到硬盘
        f.close()
      • 关闭

        f.close()
      • 文件修改:必须全部拿到内存 进行修改,再重新刷进内存

day08文件操作的更多相关文章

  1. day08——文件操作

    day08 文件操作: open() :打开 f (文件句柄)= open("文件的路径(文件放的位置)",mode="操作文件的模式",encoding=&q ...

  2. day08文件操作的三步骤,基础的读,基础的写,with...open语法,文件的操作模式,文件的操作编码问题,文件的复制,游标操作

    复习 ''' 类型转换 1.数字类型:int() | bool() | float() 2.str与int:int('10') | int('-10') | int('0') | float('-.5 ...

  3. day08 文件操作

    1.三种字符串: (1)u'' 普通字符串 ---> u'abc' ---> 默认的文本方式,以字符作为文本的输出方式 (2)b'' 二进制字符串 ---> b'ASCII码' -- ...

  4. Python集训营45天—Day08 (文件操作)

    目录 1. 文件操作介绍 2. 文件的读写 2.1 文本文件 2.2 二进制文件 2.3 JSON文件 3. 文件的定位,重命名和删除 4. 文件夹的相关操作 1. 文件操作介绍 大家应该听说过一句话 ...

  5. python day08 文件操作

    2019.4.8 S21 day08笔记总结 一.进制 对于计算机而言无论是文件存储 / 网络传输数据本质上都是:二进制(010101010101),如:电脑上存储视频/图片/文件都是二进制: QQ/ ...

  6. Python:Day08 文件操作

    能调用方法的一定是对象! 文件的操作分为三步: 1.打开文件 2.操作文件 3.关闭文件 f= open('小重山','r',encoding='utf8') #以读的方式打开一个文件,如果文件不存在 ...

  7. 铁乐学Python_day08_文件操作

    一.[基本的文件操作] 参数: 1.文件路径: 2.编码方式: 3.执行动作:(打开方式)只读,只写,追加,读写,写读! #1. 打开文件,得到文件句柄并赋值给一个变量 f = open('E:/Py ...

  8. day08(字符编码,字符与字节,文件操作)

    一,复习 ''' 类型转换 1.数字类型:int() | bool() | float() 2.str与int: int('10') | int('-10') | int('0') | float(' ...

  9. day08 python文件操作

    day08 python   一.文件操作     1.文件操作的函数         open(文件名, mode=模式, encoding=字符集)       2.模式: r, w, a, r+ ...

随机推荐

  1. android项目导入eclipse变成java项目——修改.project文件——亲测有效

    解决办法:http://www.cnblogs.com/yunfang/p/6068599.html

  2. BPM与OA区别

    核心差异: OA解决的是流程有无问题 BPM解决的是流程更好更优的问题 主要差异如下: 1.BPM有更好的广度跟深度 这里的广度是指应用场景的广度. BPM一般都会以端到端的方式衔接企业运营过程的上下 ...

  3. 电脑小白和ta的小白电脑——JAVA开发环境

    JAVA开发环境的搭建有一点点复杂,不过一步一步来一般不会出错. (一)下载JDK 首先我们需要下载java开发工具包JDK,可以通过官网下载:http://www.oracle.com/techne ...

  4. react系列笔记:第一记-redux

    前言: 目前公司使用dva,对于前不久还是使用原生js的我来说,花了差不多一两周时间,基本掌握如何使用.虽然对于react有一点点基础,但很多地方未深入,很多概念也很模糊,故从本文开始,记录一下系统的 ...

  5. 使用spring:aop中修改增强方法中的参数

    大家都知道,在增强方法中,使用jp.getArgs()[index]可以获取传进来的参数,但是参数传进来之后,怎么改变它的值呢? 因为jp.getArgs()[index]获取到的只是数据的备份,所以 ...

  6. L1-059 敲笨钟

    微博上有个自称“大笨钟V”的家伙,每天敲钟催促码农们爱惜身体早点睡觉.为了增加敲钟的趣味性,还会糟改几句古诗词.其糟改的方法为:去网上搜寻压“ong”韵的古诗词,把句尾的三个字换成“敲笨钟”.例如唐代 ...

  7. μCOS-Ⅲ——临界段

    临界段代码(critical sections),也叫临界区(critical region),是指那些必须完整连续运行,不可被打断的代码段.μC/OS-Ⅲ系统中存在大量临界段代码.采用两种方式对临界 ...

  8. springboot源码之(内嵌tomcat)

    server---service----engine----host-----context---wrapper---servletStandardServer---StandardService-- ...

  9. 帝国cms中下拉框select的绑定

    在修改数据模型中,将下拉框的表示代码换成下: 将id换成自己的id地址.数据库查询中的classid换成自己创建栏目的id. <select name="diqu" id=& ...

  10. Exception in thread "main" java.lang.NullPointerException at Class.main

    出现这种问题,可能的原因之一可能是对象数组未初始化. Class[] class = new Class[N]; for(int i = 0; i < N; i++){ class[i] = n ...