Day2_and_Day3 文件操作
文件修改操作:
文件的修改操作:文件并没有修改操作,实际是将一个编写的新文件覆盖了原有的文件
替换文件中的某个内容:
with open('old.txt','r',encoding='utf-8') as read_f,\
open('.old.txt.swap',swap,'w',encoding='utf-8') as write_f:
msg=read_f.read()
msg=msg.replace('alex','SB')
print(msg)
wirte_f.write(msg)
os.remove('old.txt') #删除原有的文件
os.rename('.old.txt.swap','old.txt') #将交换文件替换为原有的文件
然后再替换回来:
with open('old.txt','r',encoding='utf-8') as read_f,\
open('.old.txt.swap',swap,'w',encoding='utf-8') as write_f:
for line in read_f:
if 'SB' in line:
line=line.replace('SB','alex')
write_f.write(line)
os.remove('old.txt') #删除原有的文件
os.rename('.old.txt.swap','old.txt') #将交换文件替换为原有的文件
字符编码:把人类的字符翻译成计算机能认识的数字。
字符编码表:就是一张字符与数字对应关系的表。
eg:
ascii
gbk
utf-8
unicode unicode---->encode('utf-8')------>bytes
bytes------>decode('utf-8')------>unicode
原则:字符以什么格式编译的,就要以什么格式解码。
python3中字符串分为两种: x='egon' 存成unicode y=x.encode('utf-8')存成bytes
python2中字符串分为两种: x=u'egon'与python3中的字符串是一样的 y='alex'与python3中的bytes一样
f=open('a.txt','r',encoding='utf-8')
#当文件不存在的时候,不会创建文件,会报错 f.read()
#向操作系统发起调用
b模式:即直接从硬盘中读取bytes
f=open('a.txt','rb') print(f.read().decode('utf-8'))
写模式: f=open('a.txt','w',encoding='utf-8')
w文本模式的写,文件存在则清空,不存在的话则创建
f.write('aaaa\n') f.write('bbb\n')
#写一行 f.newlines('111111\n','sdsa\n')
#写多行 a文本追加模式,文件不存在创建,文件存在将光标移到最后一行 f=open('b.txt','a',encoding='utf-8')
r+,w+,a+ 分别代表读的时候可以写,写的时候可以读,追加的时候可以读。
rb模式即直接从硬盘中读取bytes f=open('a.txt','rb') print(f.read())
wb模式,写入的时候以二进制写入 f=open('a.txt','wb') f.write('你真红'.encode('utf-8'))
对于图片或者对于其他不是字符文件的复制操作:
f=open('test.jpg','rb')
print(f.read())
with open('test.jpg','rb') as read_f,open('test1.jpg','wb') as write_f:
for line in read_f:
write_f.write(line)
#写一个小程序
import sys
#python3 copy.py source.file target.file
if len(sys.argv) < 3:
print('Usage:python3 copy.py source.file target.file')
sys.exit()
with open(r'%s'%sys.argv[1],'rb') as read_f,open(r'%s'%sys.argv[2],'wb') as write_f:
for line in read_f:
write_f.write(line)
因为在window中涉及路径的问题,当存在\的时候可能会使某些字符失效。所以就利用 r 来进行转义。
用法: r%s %sys.argv 这样
文件内光标的移动:
1,文件打开方式为文本模式打开时,代表读取三个字符。
f=open('a.txt','r')
print(f.read(3))
2,文件打开方式为b模式时,代表读取三个字节。(读取的不是3的整数倍的时候,不能解码)
f=open('a.txt','rb')
print(f.read(6).decode('utf-8'))
f.seek(0) #将光标移动开头,第0个位置。
f.seek(3,1) #1代表的含义是相对于当前位置向后读取了三个位置
f.seek(0,2) #相当于移动从文章最后移动几个位置
#练习,写一个类似于linux 下类似于tail的脚本,总是显示最后一行
import time
import sys
with open(r'%s' % sys.argv[2],'rb') as f:
f.seek(0,2) while True:
line = f.readline()
if line:
print(line.decode('utf-8'),end='')
else:
time.sleep(0.2)
truncate:截断文件,只读取部分内容
f.truncate(9)只截取9个字节,剩下的都会被清空
with open('a.txt','r+',encoding='utf-8') as f:
f.truncate(6)
Day2_and_Day3 文件操作的更多相关文章
- 【.NET深呼吸】Zip文件操作(1):创建和读取zip文档
.net的IO操作支持对zip文件的创建.读写和更新.使用起来也比较简单,.net的一向作风,东西都准备好了,至于如何使用,请看着办. 要对zip文件进行操作,主要用到以下三个类: 1.ZipFile ...
- 野路子出身PowerShell 文件操作实用功能
本文出处:http://www.cnblogs.com/wy123/p/6129498.html 因工作需要,处理一批文件,本想写C#来处理的,后来想想这个是PowerShell的天职,索性就网上各种 ...
- Node基础篇(文件操作)
文件操作 相关模块 Node内核提供了很多与文件操作相关的模块,每个模块都提供了一些最基本的操作API,在NPM中也有社区提供的功能包 fs: 基础的文件操作 API path: 提供和路径相关的操作 ...
- 归档NSKeyedArchiver解归档NSKeyedUnarchiver与文件管理类NSFileManager (文件操作)
========================== 文件操作 ========================== 一.归档NSKeyedArchiver 1.第一种方式:存储一种数据. // 归档 ...
- SQL Server附加数据库报错:无法打开物理文件,操作系统错误5
问题描述: 附加数据时,提示无法打开物理文件,操作系统错误5.如下图: 问题原因:可能是文件访问权限方面的问题. 解决方案:找到数据库的mdf和ldf文件,赋予权限即可.如下图: 找到mdf ...
- 通过cmd完成FTP上传文件操作
一直使用 FileZilla 这个工具进行相关的 FTP 操作,而在某一次版本升级之后,发现不太好用了,连接老是掉,再后来完全连接不上去. 改用了一段时间的 Web 版的 FTP 工具,后来那个页面也 ...
- Linux文件操作的主要接口API及相关细节
操作系统API: 1.API是一些函数,这些函数是由linux系统提供支持的,由应用层程序来使用,应用层程序通过调用API来调用操作系统中的各种功能,来干活 文件操作的一般步骤: 1.在linux系统 ...
- C语言的fopen函数(文件操作/读写)
头文件:#include <stdio.h> fopen()是一个常用的函数,用来以指定的方式打开文件,其原型为: FILE * fopen(const char * path, c ...
- Python的文件操作
文件操作,顾名思义,就是对磁盘上已经存在的文件进行各种操作,文本文件就是读和写. 1. 文件的操作流程 (1)打开文件,得到文件句柄并赋值给一个变量 (2)通过句柄对文件进行操作 (3)关闭文件 现有 ...
随机推荐
- UNIX环境高级编程——线程属性
pthread_attr_t 的缺省属性值 属性 值 结果 scope PTHREAD_SCOPE_PROCESS 新线程与进程中的其他线程发生竞争. detachstate PTHREAD_CREA ...
- UNIX环境高级编程——system V消息队列
unix早期通信机制中的信号能够传送的信息量有限,管道则只能传送无格式字节流,这远远是不够的. 消息队列(也叫报文队列)客服了这些缺点: 消息队列就是一个消息的链表. 可以把消 ...
- java实现:将一个数逆序输出
前面我们用C语言实现过这个程序,其实java也一样的,很多步骤跟C差不多,但是有些接口和特性可能不同: import java.util.Scanner;//要使用scanner这个类,就需要导入一个 ...
- 在IFrame中查找IFRAME中的元素的方式
下面是内部iframe找外部mainFrame的情况 var websiteSearchButton = window.parent.parent.document.getElementById(' ...
- Cannot start service MSSQL$MICROSOFT##WID on computer
在做ADFS部署过程中配置ADFS服务时遇到如下问题 检查系统日志错误日志如下,很明显"NT SERVICE\MSSQL$MICROSOFT##WID"这个账户不在log on a ...
- 学习pthreads,多线程的创建和终止
在多CPU多线程的编程中,通过作者的学习发现,pthreads的运用越来越广泛,它是线程的POSIX标准,定义了创建和操作线程的一整套API.环境的配置见上一篇博文,配置好环境后只需要添加#inclu ...
- 友善之臂tiny4412-1306开发板安卓系统烧写
折腾了很久,终于烧写成功.不废话,咱们说说流程吧. 首先,我们需要有一个基于tiny4412的kernel,从友善之臂官网获取. 然后解压: 1.tar -xvf linux-3.5 .... 然后 ...
- tomcat生产部署关键参数设置
JVM设置 个节点,每个tomcat预计处理500个链接,那么连接池的长连接数最大设为2000. 全节点复制(DeltaManager)模式集群节点数3-6为宜. 主备复制(BackupMnagage ...
- Android群英传笔记——第十章:Android性能优化
Android群英传笔记--第十章:Android性能优化 随着Android应用增多,功能越来越复杂,布局也越来越丰富了,而这些也成为了阻碍一个应用流畅运行,因此,对复杂的功能进行性能优化是创造高质 ...
- Linux Platform Device and Driver
从 Linux 2.6 起引入了一套新的驱动管理和注册机制 :Platform_device 和 Platform_driver . Linux 中大部分的设备驱动,都可以使用这套机制 , 设备用 P ...