读写文件open(filename, mode, encoding=None)

mode

mode 权限
r 只读
w 只写(会从头开始覆盖覆盖写当前文件内容)
a 追加写(从文件内容的末尾追加写内容,不会覆盖现有的内容)
r+ 读写(这里的写,也是从头覆盖写)
b 二进制模式

f.close()

在每次使用完文件过后,一定要是用f.close()关闭文件,避免资源的浪费

写入文件

只写w

  1. 首先创建一个空的文本文件

    1. 写入指定内容

      此时采用w模式(覆盖写)写入了两次内容

      f = open('workfile', 'w', encoding="utf-8")
      f.write('hello python\n')
      f.write('hello java\n')
      f.write('hello c\n') f.close() f = open('workfile', 'w', encoding="utf-8")
      f.write('hello python\n')
      f.write('hello java\n')
      f.write('hello c\n') f.close()

      文件内容中之显示了一次写入的内容,因为第一次写入的内容被第二写入的内容所覆盖了

      也可以再次写入不同的内容来验证这一现象

      f = open('workfile', 'w', encoding='utf-8')
      f.write('niaho ----') f.close()

      f.write('niaho ----')将上一次的内容全部覆盖,并写入新的数据

​ 覆盖写:覆盖写只在将一个文件打开后,开始写入内容时,如果再次之前文件已经被打开的话,将为按照当前写入位置,继续写 入数据

追加写a

写入方式与只写相似,只是写入模式换为a

此时workfile中的数据如下

f = open('workfile', 'a')
f.write('追加写的数据')
f.close()

追加写的数据会在原有数据的后面追加

读取文件

读取文件要在可读的模式下进行,即mode='r'

f.read(size)

  1. 使用f.read(size)可以读取文件,当省略size或者size为负数时,默认读取整个文件

    f = open('workfile', 'r', encoding='utf-8')
    print(f.read()) f.close()

    若已经读取过一次文件,在文件关闭前再次读取此文件再次读取此文件时,会返回''

    f = open('workfile', 'r', encoding='utf-8')
    print(f.read())
    print(f.read())
    f.close()

    在二进制模式下更能体现这一点

    f = open('workfile', 'rb')
    print(f.read())
    print(f.read())
    f.close()

    1. 当size的值为正整数时

      size 取其他值时,读取并返回最多 size 个字符(文本模式)或 size 个字节(二进制模式)。如已到达文件末尾,f.read() 返回空字符串('')

      f = open('workfile', 'r', encoding='utf-8')
      print(f.read(10))
      print(f.read(10))
      print(f.read(10))
      f.close()

f.readline()

f.readline() 从文件中读取单行数据;字符串末尾保留换行符(\n),只有在文件不以换行符结尾时,文件的最后一行才会省略换行符。这种方式让返回值清晰明确;只要 f.readline() 返回空字符串,就表示已经到达了文件末尾,空行使用 '\n' 表示,该字符串只包含一个换行符。

将文件的内容更改为如下

  1. 使用f.readline()读取单行数据

    f = open('workfile', 'rb')
    print(f.readline())
    print(f.readline())
    print(f.readline())
    print(f.readline())

  2. 也可以使用循环读取内容

    f = open('workfile', 'rb')
    for i in f:
    print(i)
    f.close()

定位

f.tell() 返回整数,给出文件对象在文件中的当前位置,表示为二进制模式下时从文件开始的字节数,以及文本模式下的意义不明的数字。

f.seek(offset, whence) 可以改变文件对象的位置。通过向参考点添加 offset 计算位置;参考点由 whence 参数指定。 whence 值为 0 时,表示从文件开头计算,1 表示使用当前文件位置,2 表示使用文件末尾作为参考点。省略 whence 时,其默认值为 0,即使用文件开头作为参考点。

>>> f = open('workfile', 'rb+')
>>> f.write(b'0123456789abcdef')
16
>>> f.seek(5) # 定位到文件中的第 6 个字节
5
>>> f.read(1)
b'5'
>>> f.seek(-3, 2) # 定位到倒数第 3 个字节
13
>>> f.read(1)
b'd'

TOSTUDY

JSON

​

07_读写文件open(filename, mode, encoding=None)的更多相关文章

  1. Python读写文件乱码问题

    对开发者来说,最恼人的问题之一莫过于读写文件的时候,由于编码千差万别,出现乱码问题.好难快速解决啊... 最近我也遇到了这样的问题,经研究,把大致的解决思路拿出来共享. 1. python中习惯首先声 ...

  2. C#读写文件总结

    1.使用FileStream读写文件   文件头:   using System; using System.Collections.Generic; using System.Text; using ...

  3. C# 之 读写文件

    1.使用 FileStream 读写文件 添加命名空间引用: using System; using System.Collections.Generic; using System.Text; us ...

  4. python3.x 读写文件要使用UTF8编码的话需要。。

    读写文件常遇到编码不正确的情况,都用UTF8读写文件就好了,在读写的时候加上编码格式:encoding='UTF-8'如下:with open(filename, 'r', encoding='UTF ...

  5. Python 3 学习笔记之——键盘输入和读写文件

    1. 键盘输入 Python提供了 input() 内置函数从标准输入读入一行文本,默认的标准输入是键盘.input 可以接收一个 Python 表达式作为输入,并将运算结果返回. str = inp ...

  6. Python IO编程-读写文件

    1.1给出规格化得地址字符串,这些字符串是经过转义的能直接在代码里使用的字符串 需要导入os模块 import os >>>os.path.join('user','bin','sp ...

  7. Python读写文件

    Python读写文件1.open使用open打开文件后一定要记得调用文件对象的close()方法.比如可以用try/finally语句来确保最后能关闭文件. file_object = open('t ...

  8. php中并发读写文件冲突的解决方案

    在这里提供4种高并发读写文件的方案,各有优点,可以根据自己的情况解决php并发读写文件冲突的问题. 对于日IP不高或者说并发数不是很大的应用,一般不用考虑这些!用一般的文件操作方法完全没有问题.但如果 ...

  9. Inno Setup 如何读写文件

    软件安装的实质就是拷贝,对于简单的打包当然不需要考虑修改某(配置)文件.通过inno修改文件的目的在于把安装时相关信息写入文件中,提供其它应用的读取,而这些信息也只能在安装时才能确定,比如安装用户选择 ...

  10. c# 高效读写文件

    一.同步读写文件(在并发情况下不会发生文件被占用异常) static void Main(string[] args) { Parallel.For(0, 10000, e => { strin ...

随机推荐

  1. 大咖论道|金融AI下一阶段的发展思考

    回顾过去十年,人工智能(AI)技术的发展速度让人惊叹,金融行业是现今AI应用最具潜力和最为活跃的领域之一.通过多年渗透,AI不间断从技术驱动迈向场景驱动,已广泛与金融业务深度融合,衍生出众多新业态.新 ...

  2. shell脚本,主要是对输入参数检验

    usage(){  echo "\nUSAGE:\n"  echo "PmActivityReport.sh\t-type\t<latency|activity&g ...

  3. [转]解决Android Studio初次配置可能会出现的Unkown Host问题

    Unkown Host"杩欐槸鍦ㄤ富鏈哄悕瑙f瀽鏃堕 氬父鍑虹幇鐨勬殏鏃", You may need to adjust the proxy settings in Gradle ...

  4. 即时通讯技术文集(第32期):IM开发综合技术合集(Part5) [共12篇]

    为了更好地分类阅读 52im.net 总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第32 期. [- 1 -] IM开发干货分享:如何优雅的实现大量离线消息的可靠投递 [链接]  ...

  5. 到底什么是Java AIO?为什么Netty会移除AOI?一文搞懂AIO的本质!

    本文由得物技术团队Uni分享,本文有内容修订和大量排版优化. 1.引言 关于Java网络编程中的同步IO和异步IO的区别及原理的文章非常的多,具体来说主要还是在讨论Java BIO和Java NIO这 ...

  6. IM通讯协议专题学习(六):手把手教你如何在Android上从零使用Protobuf

    本文由sweetying分享,为了更好的阅读体验,有较多的内容修订和排版优化. 1.前言 最近我负责的 LiveChat 客服聊天系统到了自研阶段,任务类似于做一个腾讯云IM这样的通信层SDK.在和后 ...

  7. SQL优化——深分页&排序

    问题背景 在开发 Web 应用或处理数据库查询时,分页是一项常见需求.然而,当面对深度分页(即页码较大,偏移量较高的分页情况)时,性能问题往往接踵而至.比如对一些需要拉特定的页面查询.范围导出.范围计 ...

  8. BotSharp:又一个.Net重磅AI开源项目,.Net在AI领域开始崛起!

    大家好,我是编程乐趣. 自从大模型爆火以来,.Net不管是官方.还是社区开源项目,都陆续推出很多重磅的项目. 在AI领域,对话即平台(CaaP)是未来的发展方向. 下面介绍一个开源项目,面向AI Bo ...

  9. 前端学习openLayers配合vue3(圆形形状的绘制)

    上节课我们学了加载了矢量图片,这节我们来学绘制圆形 关键代码,第一段呢是设置圆点的操作,第二步是点击地图获取地图位置来设置圆点,ol还有很多类,各种形状的 //设置圆点 // let anchorLa ...

  10. Solution Set - “也许我们早已经共鸣在那约定之地”

    目录 0.「AGC 024D」Isomorphism Freak 1.「APIO 2018」「洛谷 P4631」选圆圈 2.「UR #2」「UOJ #31」猪猪侠再战括号序列 3.「UR #3」「UO ...