Python学习日记(七) 文件操作
文件操作:
首先要有一个文件作为对象,例‘文件名’.txt
1.文件路径:例 d:\文件名.txt
<1>:绝对路径:从根目录往后的路径
<2>:相对路径:当前目录下的路径有什么算什么
2.编码方式:UTF-8、GBK2312等
3.操作模式:只读、只写、追加、写读、读写等
文件是以什么变法方式储存就要以什么编码方式打开
f = open('目标文件',mode='r',encoding='utf-8') #以UTF-8编码的文件为例
content = f.read()
print(content)
f.close()
读:
1.mode = 'r'文件的默认读取方式
f.read() 文件打开后将bytes类型转化为str类型,返回值是str,Python3下的编码方式是unicode,
f2 = open('f:\目标文件.txt',mode='r',encoding='gbk') #打开的文件编码是gbk
content2 = f2.read()
print(content2) #asd123文件
f2.close()
2.mode = 'rb'主要用于非文字类型文件操作,不用写编码方式
3.先读后写
f = open('目标文件',mode='r+',encoding='utf-8')
print(f.read()) #
f.write('abcd123')
f.close() #123456789abcd123
在f.write()后添加一个print(f.read()) ,这段代码并不会执行
在r+模式下进行写读,写了多少就会覆盖多少
#原文件内容:123456789
f = open('目标文件',mode='r+',encoding='utf-8')
f.write('abcdefg')
print(f.read()) #
f.close()
4.mode = 'r+b' 以bytes类型打开
#原文件内容:123456789
f = open('目标文件',mode='r+b')
print(f.read()) #b'123456789'
f.write('abc'.encode('utf-8'))
f.close() #文件更新后:123456789abc 以utf-8编码
写:
在写入一个文件时若没有就会创建一个新的文件,有则将原文件删除再添加新的文件
1.只读 mode = 'w'
#原文件内容:123456789
f = open('目标文件',mode='w',encoding='utf-8')
f.write('abcdefg')
f.close() #文件更新后:abcdefg
2.mode = 'wb'
#原文件内容:123abc中国
f = open('目标文件',mode='wb')
f.write('gbka123'.encode('utf-8'))
f.close() #文件更新后:gbka123 编码方式:utf-8
如果再以gbk编码方式去读取这个文件那么将报错
3.mode = 'w+' 先写后读
#原文件内容:123abc中国
f = open('目标文件',mode='w+',encoding='utf-8')
f.write('gbk2312')
print(f.read())
f.close() #文件更新后:gbk2312 编码方式:utf-8
4.mode = 'w+b'
f1 = open('logo-grey.png',mode='rb')
content = f1.read()
print(content)
f1.close()
f2 = open('logo-grey2.png',mode='wb')
f2.write(content)
f2.close()
将原文件以rb形式读出来再写入到一个新的文件中去
追加:
1.mode = 'a'
#原文件内容:123abc中国
f = open('目标文件',mode='a',encoding='utf-8')
f.write('%%%%')
f.close() #文件更新后:123abc中国%%%% 编码方式:utf-8
2.mdoe = 'a+'
#原文件内容:123abc中国
f = open('目标文件',mode='a+',encoding='utf-8')
f.write('%%%%')
print(f.read())
f.close() #文件更新后:123abc中国%%%% 编码方式:utf-8
其他功能:
1.f.read(n)
当文件打开的方式为文本模式时,代表读取n个字符
#原文件内容:123abc中国
f = open('目标文件',mode='r',encoding='utf-8')
content = f.read(6)
print(content)
f.close() #123abc
当文件打开为b模式时,代表读取n个字节
f = open('logo-grey.png',mode='rb')
content = f.read(10)
print(content)
f.close() #b'\x89PNG\r\n\x1a\n\x00\x00'
2.f.seek(光标位置)
seek(n)光标移动到n位置,移动的单位为byte,所有utf-8编码的中文部分必须是3的倍数
移动到开头:seek(0)
移动到结尾:seek(0,2) seek最后一个参数表示从哪个位置进行偏移,1表示前位置,2表示结尾
#原文件内容:123abc中国
f = open('目标文件',mode='r+',encoding='utf-8')
f.seek(0) #将光标置于开头
print(f.read())
f.seek(0) #将光标置于开头
f.seek(0,2) #将光标置于结尾
print(f.read()) #读到空白
f.seek(0)
f.write('随便')
f.flush() #文件更新后:随便中国 3*2 = 6 byte
f.close()
3.f.tell()
告诉我们光标在什么位置
#原文件内容:123abc中国
f = open('目标文件',mode='r+',encoding='utf-8')
f.seek(0) #将光标置于开头
print(f.tell()) #
print(f.read())
f.seek(0) #将光标置于开头
print(f.tell()) #
f.seek(0,2) #将光标置于结尾
print(f.tell()) #
print(f.read()) #读到空白
f.seek(0)
print(f.tell())
f.write('随便')
f.flush() #文件更新后:随便中国 3*2 = 6 byte
print(f.tell()) #
f.close()
4.f.readable()&f.writeable() 判断是否可读
#原文件内容:123abc中国
f = open('目标文件',mode='r+',encoding='utf-8')
print(f.readable())
print(f.writable())
f.close()
5.f.readline()
每次只读一行,读取后的数据都有一个'\n',原文件内容不会发生改变
#原文件内容:
#
# abc
# gb2
#
# asd
import os
li = []
f = open('目标文件',mode='r+',encoding='utf-8')
while f.tell() != os.path.getsize('目标文件'):
li.append(f.readline().strip())
f.close()
print(li) #['123', 'abc', 'gb2', '456', 'asd']
6.f.readlines()
返回一个列表,列表中的元素是原文件的每一行,文件如果过大,占内存且容易崩盘
#原文件内容:
#
# abc
# gb2
#
# asd
f = open('目标文件',mode='r+',encoding='utf-8')
print(f.readlines()) #['123\n', 'abc\n', 'gb2\n', '456\n', 'asd']
f.close()
7.f.truncate()
对原文件进行截取数据,0则全删 以byte为单位截取
#原文件内容:123456abcd
f = open('目标文件',mode='r+',encoding='utf-8')
f.truncate(4)
print(f.read()) #
f.close()
8.for循环
文件句柄是一个迭代器,每一次的循环只在内存中占一行数据,非常节省内存
#原文件内容:
#
# abc
# gb2
#
# asd
f = open('目标文件',mode='r+',encoding='utf-8')
for i in f:
print(i,end = '')
f.close()
# 打印内容
#
# abc
# gb2
#
# asd
9.修改文件
# 原文件内容:
#
# abc
# gb2
#
# asd
#
with open('目标文件',encoding='utf-8') as f1,open('目标文件.bak','w',encoding='utf-8') as f2:
for line in f1:
if '' in line:
line = line.replace('','hello world!')
f2.write(line)
# 文件修改后内容:
# hello world!
# abc
# gb2
#
# asd
# hello world!
import os
os.remove('目标文件') #删除文件
os.replace('目标文件.bak','目标文件') #重命名
10.文件打开的另一种办法
with open('目标文件',mode='r',encoding='utf-8') as f:
print(f.read())
多个文件操作:
with open('目标文件',mode='r',encoding='utf-8') as f1,\
open('目标文件2',mode='w',encoding='utf-8') as f2:
print(f1.read())
f2.write('something')
Python学习日记(七) 文件操作的更多相关文章
- python学习日记(文件操作练习题)
登录注册(三次机会) name = input('请注册姓名:') password = input('请注册密码:') with open('log',mode='w',encoding='utf- ...
- Python学习日记之文件读取操作
Python内置了文件读写的函数open,read 用法示例: open('/home/root/files.txt ') 在打开文件后,操作完成后可以使用close()关闭文件,但比较好的文件读写方 ...
- Python学习:7.文件操作
文件操作 我们曾将听过一个问题,将大象放入冰箱分为三步:1.打开冰箱门,2.将大象放进去,3.关上冰箱门.今天我们要讲的Python文件操作的步骤就像将大象放入冰箱的步骤一样. 使用Python操作文 ...
- 【Python学习之六】文件操作
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 python3.6 一.文件的打开与关闭 使用open函数,可以打开一 ...
- python学习笔记之文件操作(三)
这篇博客小波主要介绍一下python对文件的操作 对文件的操作主要分为三步: 1.打开文件获取文件的句柄,句柄也是文件描述符 2.通过文件句柄操作文件 3.关闭文件. 现有以下文件,是小波随写的周杰伦 ...
- python学习笔记4(文件操作)
文件操作: 1.f=open(”caidan”,”w”,encoding=”utf8”) 直接打开一个文件,如果文件不存在则创建文件 f.close() 2.with open (”caid ...
- python学习笔记三 文件操作(基础篇)
文件操作 打开文件 open(name[,mode[,buffering]]) open函数使用一个文件名作为强制参数,然后返回一个文件对象.[python 3.5 把file()删除掉] w ...
- python学习第十八天 --文件操作
这一章节主要讲解文件操作及其文件读取,缓存,文件指针. 文件操作 (1)文件打开:open(filepath,filemode) filepath:要打开文件的路径 filemode:文件打开的方式 ...
- python学习笔记(三):文件操作和集合
对文件的操作分三步: 1.打开文件获取文件的句柄,句柄就理解为这个文件 2.通过文件句柄操作文件 3.关闭文件. 文件基本操作: f = open('file.txt','r') #以只读方式打开一个 ...
随机推荐
- 分布式事务之最终一致性BASE理论
一.事务 事务提供一种机制将一个活动涉及的所有操作纳入到一个不可分割的执行单元,组成事务的所有操作只有在所有操作均能正常执行的情况下方能提交,只要其中任一操作执行失败,都将导致整个事务的回滚.简单地说 ...
- 2019年10~11月-NLP工程师求职记录
求职目标:NLP工程师 为什么想换工作? 除了技术相关书籍,我没读过太多其他类型的书,其中有一本内容短但是对我影响特别大的书--<谁动了我的奶酪>.出门问问是我毕业后的第一份工作,无论是工 ...
- [转]vue项目中 指令 v-html 中使用过滤器filters功能
转载于简书 链接:http://www.jianshu.com/p/29b7eaabd1ba 问题 2.0 filters only work in mustache tags and v-bind. ...
- <div> <p> <span>的用法和区别
<div> 标签可以把文档分割为独立的.不同的部分.它可以用作严格的组织工具,并且不使用任何格式与其关联. 更重要的意义是在网页的动态实现过程中,对划分的区域统一处理,例如换背景色.字体等 ...
- 爬虫urllib2库的基本使用
所谓网页抓取,就是把URL地址中指定的网络资源从网络流中读取出来,保存到本地. 在Python中有很多库可以用来抓取网页,urllib2库基本使用. urllib2 是 Python2.7 自带的模块 ...
- Win 10 MSYS2 VS Code 配置 c++ 的编译环境
博客参考 https://www.cnblogs.com/esllovesn/p/10012653.html 和 https://blog.csdn.net/bat67/article/details ...
- k8s记录-master组件部署(八)
在 192.168.0.1 app 用户下执行1)程序准备tar zxvf kubernetes-server-linux-amd64.tar.gzmv kubernetes/server/bin/{ ...
- EasyNVR摄像机网页直播之问题解决:Failed:SYSTEM\CurrentCont......\Application\EasyNVR_Service registry key already
背景分析 经常使用EasyNVR产品的用户都知道,作为音视频行业互联网直播产品,EasyNVR主要功能在于通过RTSP/ONvif协议,接入前端音视频采集设备,通过EasyNVR软硬件产品将拉取过来的 ...
- [LeetCode] 305. Number of Islands II 岛屿的数量 II
A 2d grid map of m rows and n columns is initially filled with water. We may perform an addLand oper ...
- 讲解JavaScript中对闭包的理解
1.JS中变量的作用域 在理解闭包之前,我们得弄清楚JS中变量的作用域原理,它分为全局作用域和局部作用域,它有一个特点就是局部可以获取全局的声明变量,而全局却不能得到局部声明的变量,我们先来看一个小例 ...