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') #以只读方式打开一个 ...
随机推荐
- springboot自动装配redis在pool下偶尔出现连接异常的问题
jedis pool的配置其实是采用 org.apache.commons.pool2.impl.GenericObjectPoolConfig类的配置项. jedis 2.9版本代码如下: pack ...
- SpringBoot @Autowired中注入静态方法或者静态变量
注:用static去定义一个注入的方法或者配置文件值变量,编译时不会有任何异常,运行时会报空指针. Spring官方不推荐此种方法. 原理: https://www.cnblogs.com/chenf ...
- Robot Framwork关键字驱动+RedwoodHQ安装
一.Robot Framwork介绍 Robot Framwork是一款python编写的功能框架.具备良好的可扩展性,支持关键字驱动,可以同时测试多种类型的客户端或者接口,可以进行分布式测试执行. ...
- Python 初级 6 循环 (二)
一.复习 1 for循环 for looper in [1, 2, 3, 4]: print("hello") 1) 每次循环开始,会依次把列表中的数按顺序赋值给looper,第一 ...
- [LeetCode] 637. Average of Levels in Binary Tree 二叉树的层平均值
Given a non-empty binary tree, return the average value of the nodes on each level in the form of an ...
- [LeetCode] 651. 4 Keys Keyboard 四键的键盘
Imagine you have a special keyboard with the following keys: Key 1: (A): Print one 'A' on screen. Ke ...
- pip修改成国内镜像源
临时指定镜像源 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple seaborn 永久修改镜像源 linux下,修改 ~/.pip/pip ...
- 【python小记】访问mysql数据库
题记: 最近因为工作需要,学习了python,瞬间对这个轻松快捷的语给吸引了,以前只知道js脚本是写网页的,没有想到python这个脚本语言的应用范围可以这么广泛,现在做一些简单或稍微复杂的操作,基本 ...
- urlencode编码 — 为什么要编码
原文链接:https://blog.csdn.net/stpeace/article/details/82892571 参考:https://blog.csdn.net/z69183787/artic ...
- 网络 TCP三次握手,四次挥手详解
三次握手,四次挥手可以说是炙手可热的面试题了,来看看它究竟长什么样子吧! 我们先把流程图贴上来 : 为什么这么复杂? 因为TCP是可靠性传输. 确认可靠传输的前提: TCP连接管理机制 用TCP首部 ...