文件-读、写、追加已经文件操作

读文件:r

f=open(‘test.txt‘,mode=‘r‘)
for line in f:
    print(line)
f.close()

print本身会换行,文本自带一个\n,所以有换行

二进制读取:rb

写文件:w,w会创建新文件,有同名则删除内容再写入

f=open(‘test1.txt‘,mode=‘w‘,encoding="gbk")
#unicode会自动转码位gbk
f.write("unicode编码写入gbk文件")
f.close()

二进制写文件:wb,wb也会创建文件,有同名则删除内容再写入

图片,音乐,视频等写入需用wb模式,二进制模式

二进制模式写字符串到问文件,会报错。提示需要二进制数据,非字符串

f=open(‘test2.txt‘,mode=‘wb‘)
#unicode会自动转码位gbk
f.write("unicode编码写入gbk文件")
f.close()

解决以上问题,我们需要用encode方法,encode方法不传参python3默认用utf-8进行编码

f=open(‘test2.txt‘,mode=‘wb‘)
#unicode会自动转码位gbk
f.write("二进制模式写字符串到文件,需要先进行编码".encode(‘gbk‘))
f.close()

文件追加:a 或ab,源文件用二进制模式追加必须用ab模式,否则乱码

f=open(‘test3.txt‘,mode=‘a‘,encoding=‘gbk‘)
#unicode会自动转码位gbk
f.write("这是追加部分内容")
f.close()

混合模式:

  • r+,读的模式打开文件,支持写入,即读写模式
  • w+,写的模式打开文件,支持读取,即写读模式,w+也会将原有文件清楚

文件操作:

  • fileno()返回文件句柄再内核中的索引值,IO多路复用会用到
  • flush()把文件从内存buffer里强制刷新到硬盘,close()时会自动保存到硬盘

写入文件,但是内容打开是空白

flush()后会存入硬盘

  • readable()判断是否可读

以w模式打开,判断是否可读

  • readline()读取一行,即遇到\r或\n结束
  • seek()把操作文件的光标移动到指定位置

seek是按字节移动光标,至于移动多少个字符,与文件编码有关,gbk移动两个字节位一个字符,utf8移动三个字节算一个字符,read是按字符读取

  • seekable()判断文件是否可进行seek操作,如设备是不可seek的
  • tell()返回当前文件操作光标

  • truncate()从指定位置截取文件到末尾,不指定位置则从当前位置截取

  • writable()判断文件是否可写

修改文件

先f.seek(),再write()会替换文件,而且可能会存在乱码。所以修改需全部读入内存再进行修改,之后再保存覆盖。

原文地址:https://www.cnblogs.com/yaya625202/p/8836125.html

时间: 2024-11-09 12:38:00

文件-读、写、追加已经文件操作的相关文章

移动文件读/写指针----lseek

头文件:#include<sys/types.h>.#include<unistd.h> 函数原型:off_t lseek(int fildes,off_t offset,int whence) 参数说明:fildes:文件描述符    offset:偏移量,正数表示正向偏移,负数表示负向偏移. whence:设定从文件的哪里开始偏移,可能取值为SEEK_CUR:为当前位置,SEEK_SET:文件开头:SEEK_END:文件结尾,可分别表示为数字(1,0,2). 返回值:当调用成功

用JSmooth制作java jar文件的可运行exe文件教程【图文】

这是我之前在个人博客3yj上面写的一篇文章,如今转载过来,原文地址 (这不是广告哦) 几年前,刚接触java的是,就想用一些方法把自己的劳动果实保护起来,曾经也用过非常多这种工具,有一个特别好用,今天写篇文章跟大家分享. 今天要用到的工具有 JSmooth 0.9.9-7 汉化版,能够到本站下载:JSmooth 0.9.9-7 汉化版 首先要把你的程序打包成双击能够运行的包,详细的方法我就不多说了,网上非常多的,主要命令是:jar cvfm test.jar *.* -C  之类的 主要是确保其

Python 文件(读\写)操作

文件(读\写)操作 open()函数,用来打开文件,创建file对象.open(name[,mode[,buffering]])name:要打开的文件mode:是打开文件的模式(读.写.追加)buffering:是否要寄存,默认为0或者False(不寄存),1或True表示寄存(意味着使用内存来代替硬盘,让程序更快,只有使用flush或者close才会更新硬盘上的数据),如果大于1表示寄存区的缓冲大小(单位:字节),如果是负值,表示寄存区为系统默认大小. open函数中模式参数的常用量:r 读模

asp.net 文件操作小例子(创建文件夹,读,写,删)

静态生成要在虚拟目录下创建文件夹 来保存生成的页面 那么就要对文件进行操作 一.创建文件夹 using System.IO; string name = "aa"; string path = Server.MapPath("") + "\\" + name; if (Directory.Exists(path)) { Response.Write("<script>alert('文件夹已存在了!');history.go(

java并发读&写文件

最近在看Brian Goetz 的<<Java并发实战>>,这本书有两个版本,电子工业出版社的译本很糟糕,建议使用机械工业出版社出版出版的书籍. 在看到第三四章的时候突然想到了多线程读写文件,同时遇到一些书中没有的问题 1, 如何保证组合对象的安全性? 2, 如何判断不变性的约束条件 3, 如何不通过synchronized关键字和锁进行同步处理? 下面是一段代码, 用来从source 读取数据,通过多线程写入target文件中 思路: 1, 如何read/write文件? 2,

测试利用多线程进行文件的写操作

最近学习NIO技术,了解了有关channel通道.buffer缓存以及selector选择器等技术,萌发了想写一个多点下载的一个简单测试demo.我将这个demo分成两步,第一步先实现将一个文件分段复制到一个文件中(通常我们是将文件以流的形式一个字节一个字节的复制到目标文件中,现在我们是将文件分段,启用多个线程,每个线程复制一部分,然后再根据原文件分段的位置组装成一个文件,实现高效的目的).下面帖源码 /** * 测试利用多线程进行文件的写操作 * @author gcl * @version

OpenCV下的CSV文件读、写

1.CSV文件格式简介 逗号分隔值(Comma-SeparatedValues,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本).纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据.CSV文件由任意数目的记录组成,记录间以某种换行符分隔:每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符.通常,所有记录都有完全相同的字段序列. CSV文件格式的通用标准并不存在,但是在RFC 4180中有基础性的

java读/写文件

读取文件参考:https://blog.csdn.net/weixin_42129373/article/details/82154471 写入文件参考:https://blog.csdn.net/BanketBoy/article/details/86504704 https://www.cnblogs.com/chenpi/p/5498731.html 1 package text; 2 3 import java.io.BufferedReader; 4 import java.io.Bu

ubuntukylin基础 chmod 对一个文件的所有者,用户组,其他人分别添加或删除 读 写 执行 的权限

镇场文:       学儒家经世致用,行佛家普度众生,修道家全生保真,悟易理象数通变.以科技光耀善法,成就一良心博客.______________________________________________________________________________________________________ 我的系统:UbuntuKylin 16.04 LTS 64bit step0: 查看指定文件的权限 step1: 减去所有者的 读 写 执行的权限 step2: 查看执行效果