文件操作概述

计算机系统分为:操作系统,计算机硬件,应用程序。

我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众所周知,应用程序是无法直接操作硬件的,这就用到了操作系统。操作系统把复杂的硬件操作封装成简单的接口给用户/应用程序使用,其中文件就是操作系统提供给应用程序来操作硬盘虚拟概念,用户或应用程序通过操作文件,可以将自己的数据永久的保存下来。

读文件

#相对路径下创建的log文件,也可以绝对路径,不过要写完整路径名
f = open('log',mode='r',encoding='utf-8')#以什么编码方式创建的,以什么编码方式读出来
l = f.read()
print(l)
f.close()   #文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,# 并且操作系统同一时间能打开的文件数量也是有限的

写文件

f = open('log',mode='w',encoding='utf-8')#写入的话是先清空原有内容,再写入新的数据,若文件不存在,创建新文件
f.write('这是新写入的内容')
f.close()
#对写完新内容的文件进行读取
f = open('log',mode='r',encoding='utf-8')#以什么编码方式创建的,以什么编码方式读出来
l = f.read()
print(l)
f.close()   #文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,# 并且操作系统同一时间能打开的文件数量也是有限的

追加内容

#对文件进行追加内容,指针在文件末尾,若文件不存在,创建新文件
f = open('log',mode='a',encoding='utf-8')
f.write('---这是追加的内容')
f.close()
#对追加完内容的文件进行读取
f = open('log',mode='r',encoding='utf-8')#以什么编码方式创建的,以什么编码方式读出来
l = f.read()
print(l)
f.close()   #文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,# 并且操作系统同一时间能打开的文件数量也是有限的

二进制文件

前面讲的默认都是读取文本文件,并且是以utf-8编码的文本文件。要读取二进制文件,比如,图片、视频等,用'rb' 模式打开即可。非文本文件

rb

一、

f = open('log',mode='w',encoding='utf-8')#写入的话是先清空原有内容,再写入新的数据
f.write('abcd123')
f.close()
f = open('log',mode='rb')#bytes类型,非文本文件等
l = f.read()
print(l)
f.close()   #文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,# 并且操作系统同一时间能打开的文件数量也是有限的

二、汉字

f = open('log',mode='w',encoding='utf-8')#写入的话是先清空原有内容,再写入新的数据
f.write('这是五个字')
f.close()
f = open('log',mode='rb')#bytes类型,非文本文件等
l = f.read()
print(l)
f.close()   #文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,# 并且操作系统同一时间能打开的文件数量也是有限的

wb

一、

f = open('log',mode='wb')#写入的话是先清空原有内容,再写入新的数据,若文件不存在,创建新文件
f.write('abcde'.encode('utf-8'))#涉及到str-->bytes
f.close()
f = open('log',mode='r')
l = f.read()
print(l,type(l))#自动帮你转换成str
f.close()   #文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,# 并且操作系统同一时间能打开的文件数量也是有限的

二、汉字

f = open('log',mode='wb')#写入的话是先清空原有内容,再写入新的数据,若文件不存在,创建新文件
f.write('三个字'.encode())#涉及到str-->bytes,编码方式默认是utf-8
f.close()
f = open('log',mode='r',encoding='utf-8')
l = f.read()
print(l,type(l))#自动帮你转换成str
f.close()   #文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,# 并且操作系统同一时间能打开的文件数量也是有限的

ab

同理,不再赘述。

读写r+

一、先读再写

f = open('log',mode='r+',encoding='utf-8')#打开一个文件用于读写
print(f.read())#读完,光标移动到最后,写才没有覆盖
f.write('123')
f.close() 

二、先写再读

f = open('log',mode='r+',encoding='utf-8')#打开一个文件用于读写
f.write('456')#指针在文件开头
print(f.read())
f.close() 

写完之后,指针在‘456’的后面,然后执行读,读的是当前指针之后的字符串。

w+

打开一个文件用于读写,并从头开始编辑,即原有内容会被删除,若文件不存在,创建新文件。

f = open('log',mode='w+',encoding='utf-8')#打开一个文件用于读写
f.write('456')#指针在文件开头
print(f.read())#指针已经到了最后,所以读是无输出的
f.close()

a+

打开一个文件用于读写,文件已存在,指针在文件末尾,不存在,创建新文件。

f = open('log',mode='a+',encoding='utf-8')#打开一个文件用于读写
f.write('追加的')#指针在文件末尾
print(f.read())#追加,所以读无输出
f.close() 

二进制文件

同理。

seek (字节)

一、

f = open('log',mode='r+',encoding='utf-8')#打开一个文件用于读写
print(f.read())
f.close()f = open('log',mode='r+',encoding='utf-8')#打开一个文件用于读写
f.seek(3)#指针移到3,指定光标位置
print(f.read())
f.close()

二、

f = open('log',mode='w',encoding='utf-8')
f.write('晴川历历汉阳树')
f.close()
f = open('log',mode='r+',encoding='utf-8')#打开一个文件用于读写
f.seek(3)#seek单位是字节,一个中文三个字节
print(f.read())
f.close()

对于中文,不是3的整数倍,就会引发异常。

tell(字节)

一、

f = open('log',mode='r+',encoding='utf-8')#打开一个文件用于读写
f.seek(3)#指针移到3,指定光标位置
print(f.tell())#找到指针当前位置,seek指定的为3
print(f.read())
f.close()

二、

f = open('log',mode='w',encoding='utf-8')
f.write('晴川Abc')
f.close()
f = open('log',mode='r+',encoding='utf-8')#打开一个文件用于读写
f.seek(3)#seek单位是字节,一个中文三个字节
print(f.read(2))#从当前指针位置读取几个字符
print(f.tell())#tell单位是字节,找到指针当前位置
f.close()

read(字符)

f = open('log',mode='w',encoding='utf-8')
f.write('晴川abc历历汉阳树')
f.close()
f = open('log',mode='r+',encoding='utf-8')#打开一个文件用于读写
f.seek(3)#seek单位是字节,一个中文三个字节
print(f.read(3))#从当前指针位置读取几个字符
f.close()

with ... as...

可以省去.close()

with open('log',mode='r+',encoding='utf-8') as f1,\open('log',mode='a+',encoding='utf-8') as f2:#\可以用来换行l1 = f1.read()print(l1)f2.write('汉阳树')#此时指针在末尾
    f2.seek(0)l2 = f2.read()print(l2)

readline(),readlines()

with open('log',mode='w+',encoding='utf-8') as f1,\open('log',mode='r+',encoding='utf-8') as f2:f1.write('晴川历历汉阳树\n芳草萋萋鹦鹉洲')f1.seek(0)print(f2.read())f2.seek(0)print('########分界线#######')print(f2.readline(),end='\n')#只能读取一行
    f2.seek(0)print(f2.readlines())#读取多行,并且是一个列表

注:列表可以用for循环读取。

truncate(size)

从文件的首行字符开始截断,截断文件为size个字节,无size表示从当前位置截断,截断之后后面的所有字符被删除。

f = open('log',mode='w+',encoding='utf-8')
f.write('晴川历历汉阳树,芳草萋萋鹦鹉洲')
f.truncate(3)#按字节,一个中文三个字节,否则引发异常
f.seek(0)
print(f.read())
f.close()f = open('log',mode='w+',encoding='utf-8')
f.write('晴aaa川历历汉阳树,芳草萋萋鹦鹉洲')
f.truncate(5)#按字节,一个中文三个字节,否则引发异常
f.seek(0)
print(f.read())
f.close()

编码

编码概述

在计算机内存中,统一使用unicode编码,当需要保存到硬盘中或者需要传输的时候,就转换为UTF-8编码。

用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把unicode转换为utf-8保存到文件:

浏览网页的时候,服务器会把动态生成的unicode内容转换为utf-8再传输到浏览器:

#str --->bytes  encode 编码
s = '李白'#字符串是unicode
b = s.encode('utf-8')#编码成其他编码方式用来保存或传输
print(b,type(b))
#bytes --->str decode 解码
s1 = b.decode('utf-8')
print(s1,type(s1))

s = 'aaa'
b = s.encode('utf-8')#编码
print(b,type(b))
#bytes --->str decode 解码
s1 = b.decode('gbk')
print(s1,type(s1))

pass

转载于:https://www.cnblogs.com/smallfoot/p/10006712.html

python学习日记(文件操作)相关推荐

  1. [Python学习日记] 文件与文件系统(一)

    [Python学习日记] 文件与文件系统(一) 目录 Python3 File(文件) 方法 open() 方法 file 对象 目录 Python3 File(文件) 方法 open() 方法 Py ...

  2. Python学习日记-pandas操作学习

    Python学习日记-pandas模块学习 根据需求筛选数据 绘制柱状图-利用pandas绘制 绘制柱状图-利用matplotlib绘制 绘制柱状图-两组数据比较 绘制柱状图-叠加柱状图 绘制饼状图 ...

  3. Python学习笔记--文件操作

    (一)文件的编码 1. 编码 编码是一种规则集合,记录了内容和二进制间进行相互转换的逻辑 编码有许多种,最常用的是utf-8 2. 使用编码的原因 计算机只能识别二进制数,因此要将文件的内容翻译为二进 ...

  4. Python学习之文件操作

    一.文件File 通过Python程序来对计算机中的各种文件进行增删改查的操作 - I/O(Input / Output) - 操作文件的步骤: ① 打开文件 ② 对文件进行各种操作(读.写),然后保 ...

  5. Python学习(文件操作)

    文章目录 一.文件操作 1.1 常见的文件类型 1.2 文件操作的流程 1.3 文件的打开与关闭 打开 文件对象的属性 关闭 1.4 文件的读写: 读 写 1.5 定位读取 1.6 with open ...

  6. Python学习:文件操作

    一.打开文件 1.格式 在python,使⽤open函数,可以打开⼀个已经存在的⽂件,或者创建⼀个新⽂件,语法如下: open(name, mode) name:是要打开的⽬标⽂件名的字符串(可以包含 ...

  7. Python学习之==文件操作

    1.打开文件的模式 1 r,只读模式(默认)[不可写:文件不存在,会报错] 2 w,只写模式[不可读:不存在则创建:存在则删除内容] 3 a,追加模式[不可读:不存在则创建:存在则追加内容] 4 r+ ...

  8. python设置文件权限_PYTHON学习之文件操作;

    PYTHON学习之文件操作: 文件内容替换 for line in flielinput.input("filepath",inplace=1): line = line.repa ...

  9. python学习日记2-3周

    python学习日记2-3周 怠惰怠惰 improt 导入 import phone.apple.iphone6 import phone.apple.iphone7 import phone.sam ...

最新文章

  1. 将coreldraw文档以html,国家信息化(CEAC)考试试题集Coreldraw.doc
  2. 成功解决AttributeError: module tensorflow.compat has no attribute v1
  3. SpringBoot中通过重写WebMvcConfigurer的addCorsMapping方法实现后台服务解决跨域问题
  4. 排序算法之——选择排序
  5. 系统设计挖个坑(未填)
  6. 编写10ms延时的子程序c语言,求解!!!用汇编语言编写延时程序问题!!!!...
  7. js ajax通用方法,目前5个流行的AJAX调用JavaScript库
  8. Java进程中的堆和栈_对于JVM,你就只知道堆和栈吗?
  9. 【Codeforces Global Round 1 C】Meaningless Operations
  10. BeanShell变量和方法的作用域
  11. 华为数据中心产品汇总介绍
  12. AUTOSAR实战教程pdf版
  13. ATTiny85 Arduino开发环境搭建及使用
  14. python基础练习题:找到一个圆锥的体积。【难度:1级】--景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶
  15. GSM系统的网络结构
  16. 智能化工厂数字化管理系统软件解决方案
  17. 游戏建模:场景模型制作所需软件科普,让建模更简单!
  18. 软件工程导论08-基于构件的软件开发
  19. Python编写的命令行版微信。(已集成自动聊天机器人(通过网址api形式))
  20. python三维网格图_在三维Matplotlib图上调整网格线

热门文章

  1. 怎么使用ST的库开发STM32
  2. 词频分析--字典树的应用
  3. 【如何删除xxx网址导航】
  4. 2021年T电梯修理最新解析及T电梯修理模拟考试题
  5. 全志V3S嵌入式驱动开发(开发软件搭建)
  6. 七夕,用python表白的各种姿势
  7. SSH CA Host Key实验
  8. mysql 可以承受多少人_数据库服务器能够承受的最大并发量是多少?
  9. (阿里云)云服务器部署网站(使用宝塔面板)
  10. Wish获5亿美元融资,估值35亿美元成独角兽