目录

1、了解文件基本概念

1.1、什么是文件?

1.2、两种重要的文件类型

1.3、文本文件与二进制文件的优缺点

1.3.1、当文本中,中文多的话可以使用gbk存储

1.3.2、如何查看unicode(万国码)?

1.4、python3中的字符串类型

1.5、文件的缓冲机制

1.5.1、文件缓冲区

1.5.2、缓冲机制的好处

2、文件的基本操作

2.1、访问文件操作过程

2.2、打开文件

2.3、encoding

2.3.1、常见编码

2.4、打开文件

2.4.1、with管理语句

2.5、读取文件

2.5.1、关于读的时候,光标的问题

2.5.2、移动光标

2.5.3、readline()

2.5.4、readlines()

2.6、写操作

2.6.1、为什么不实时写入磁盘

2.6.2、什么时候会写入磁盘

2.7、文件对象其他方法


1、了解文件基本概念

1.1、什么是文件?

文件是存放在外部介质 (如硬盘、U盘) 上的一组完整信息的集合。这些信息可为各种文字、
图形、图像、电影、音乐,甚至包括病毒程序等。

1.2、两种重要的文件类型

• 文本文件(Text File)。文本文件是可直接阅读的,使用记事本打开即可看到文件的内
容。
• 二进制文件(Binary File)。这类文件将数据按照它的进制编码的形式存储。如BMP。由
于这类文件内容是二进制编码,使用记事本打开是显然是乱码,BMP可用图片查看器解
码。

1.3、文本文件与二进制文件的优缺点

文件读取形式 优点 缺点
文本 输出内容友好,不需要手动转换
一个字符占一个字节,文件占用的存储空间
较多,读写时需要转换(内存->显示),
访问的时效率不高
二进制
二进制文件中的数据与数据的内存中的
表现形式一致。二进制文件在存储数据
时非常紧凑,占用存储空间较少;在读
写时不需要进行转换,具有较高的时间
效率
二进制文件无法直接以字符形式输出,必须
要经过一个转换过程

无论什么类型的文件,在硬盘或者内存中都是以二进制存放

1.3.1、当文本中,中文多的话可以使用gbk存储

在uft-8中,一个中文字符是3到4个字节,一般来说是三个字节。gbk中是两个字节

>>> "中".encode("utf8")
b'\xe4\xb8\xad'  三个字节
>>> "中".encode("GBK")
b'\xd6\xd0'   两个字节;b表示bytes类型,也就是二进制
>>> "中".encode("gbk").decode('gbk')
'中'  # 用什么加码就用什么解码  ⭐⭐⭐
python2的编码是ascii码,python3的默认编码是utf8

1.3.2、如何查看unicode(万国码)?

[root@fttsaxf ~]# python3
>>> ord('中')
20013
>>> ord('国')
22269

1.4、python3中的字符串类型

bytes()和str()

注意:encode编码时可指定任何合适的编码方式,但decode解码时,一定需要对应的编码方式

1.5、文件的缓冲机制

读操作:不会直接对磁盘进行读取,而是先打开数据流,将磁盘上的文件信息拷贝到缓冲区内,然后程序再从缓冲区中读取所需数据
写操作:不会马上写入磁盘中,而是先写入缓冲区,只有在缓冲区已满或“关闭文件”时,才会将数
据写入磁盘

1.5.1、文件缓冲区

计算机系统为要处理的文件在内存中单独开辟出来的一个存储区间,在读写该文件时,做为数据交换的临时“存储中转站”。

1.5.2、缓冲机制的好处

能够有效地减少对外部设备的频繁访问,减少内存与外设间的数据交换,填补内、外设备的速度差异,提高数据读写的效率。

2、文件的基本操作

2.1、访问文件操作过程

打开文件、读取文件(将信息读到内存中)、写入文件、关闭文件(保存文件并释放空间)

2.2、打开文件

open(file, mode='r', buffering=-1, encoding=None, erroes=None, newline=None,closedfd=True, opener=None)

file,是要打开的文件名或者路径;mode,是打开的方式;encoding,是文件的编码方式;buffering,是缓存方式;

2.3、encoding

为什么需要编码?

对于计算机来说,所有信息都是由0和1组成的二进制。 人类无法仅用二进制就来完成计算机的各种操作;字符编码解决人与计算机之间的沟通问题。

2.3.1、常见编码

# bash查看文件编码方式
[root@fttsaxf rough_book]# vim utf-8.txt
[root@fttsaxf rough_book]# file utf-8.txt
utf-8.txt: UTF-8 Unicode text
#这是将utf编码文件转化为gbk
[root@fttsaxf rough_book]# iconv -f utf-8 -t gbk utf-8.txt > gbk.txt
[root@fttsaxf rough_book]# ls
find  gbk.txt  phone  phone.patch  phone_v2  utf-8.txt
[root@fttsaxf rough_book]# file gbk.txt
gbk.txt: ISO-8859 text

读取这些文件

Python 3.6.8 (default, Nov 16 2020, 16:55:22)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> fp = open("utf-8.txt")
>>> fp.read()
'这是utf-8\n'
>>> fp2 = open("gbk.txt")
>>> fp2.read()  # 因为使用了pyhon3默认的编码方式,utf
Traceback (most recent call last):File "<stdin>", line 1, in <module>File "/usr/lib64/python3.6/codecs.py", line 321, in decode(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd5 in position 0: invalid continuation byte
>>> fp2 = open("gbk.txt",encoding = "gbk")  # 指定编码方式为"gbk"
>>> fp2.read()
'这是gbk.tx\n'#用python看文件编码方式
>>> fp = open("utf-8.txt","rb")
>>> print(chardet.detect(fp.read()))
{'encoding': 'utf-8', 'confidence': 0.7525, 'language': ''}
>>> fp2 = open("gbk.txt","rb")
>>> print(chardet.detect(fp2.read()))
{'encoding': 'ISO-8859-5', 'confidence': 0.4388398420352105, 'language': 'Russian'}

2.4、打开文件

文件打开类型,是文本类型,还是二进制类型。

>>> fp = open("utf-8.txt","w")
>>> fp.write("YOU ARE SB!\n")
12  # 这里的是字符
>>> fp.write("你好\n")
3

2.4.1、with管理语句

with语句体里的内容执行完毕,会自动关闭fp的连接

import random
from collections import Counter
with open("test.txt","a+") as fp:fp.truncate(0)  # 清空文本的内容i = 0while i < 100:i += 1lucky = random.randint(1,255)fp.write(f"172.25.254.{lucky}\n")fp.seek(0)biglst = fp.readlines()counter = Counter(biglst)most_arr = sorted(counter.items(), key=lambda pair: (-pair[1], pair[0]))print(most_arr[0:10])

2.5、读取文件

2.5.1、关于读的时候,光标的问题

[root@fttsaxf rough_book]# cat test1.txt # 编码方式为ASCII
abc
abcfdsd
abcfdsagasdd
# 所有的读只会从光标的位置往后才开始读。读过之后的光标是在末尾了,若是再次使用读,就读不到东西了
>>> fp3 = open("test1.txt","r")
>>> fp3.read()
'abc\nabcfdsd\nabcfdsagasdd\n'
>>> fp3.read()
''#read读的是字符数,如果没有固定读多少个字节,会自动读到最后
>>> fp = open("test2.txt")  # 这个编码方式为utf-8
>>> fp.read(8)
'fajagaig'
>>> fp.read(2)
'ow'
>>> fp.read(3)
'g\n中'
>>> fp.read(3)
'文字符'

2.5.2、移动光标

# 使用0时
>>> fp.read()
''
>>> fp.seek(0)  # 这个是字节位置
0
>>> fp.read()
'fajagaigowg\n'# 使用1和2的时
# 移动光标位置 cookie=> 偏移量 whence=> 相对位置 (0-> 开始, 1->当前, 2->末尾)>>> fp = open("test2.txt","rb")
>>> fp.seek(-2,2)
17
>>> fp.read()
b'\xa6\n'
>>> fp.seek(-13,2)
6
>>> fp.read()
b'\xe4\xb8\xad\xe6\x96\x87\xe5\xad\x97\xe7\xac\xa6\n'
>>> fp.seek(-13,2)
6
>>> fp.read().decode("utf8")
'中文字符\n'  # 这个为13个字节

2.5.3、readline()

#readline()  每一次都读一行
>>> fp.seek(0)
0
>>> fp.readline()
'fajagaigowg\n'
>>> fp.readline()
'中文字符\n'>>> fp.seek(0)
0
>>> fp.read(3)
'faj'
>>> fp.readline()
'agaigowg\n'

2.5.4、readlines()

大文件推荐使用readlines(n)来读取,如果用read()可能会造成一个单词缺失一半

#readlines()全部读完,每一行作为一个元素,存入列表里边去
>>> fp.seek(0)
0
>>> fp.readlines()
['fajagaigowg\n', '中文字符\n']#3若是加入参数,光标所在字节在哪一行,把那一行的字节全部读出来
>>> fp.readlines(6)
['fajag\n', '中文字符\n']
>>> fp.seek(0)
0
>>> fp.readlines(5)
['fajag\n']
>>> fp.seek(0)
0
>>> fp.readlines(7)
['fajag\n', '中文字符\n']

2.5.5、 读取文件命令总结

# fp.read()  从光标位置读到文件末尾
# fp.readline()  从光标位置读到行末
# fp.readlines()   从光标位置读到文件末尾,每一行作为一个元素放到列表里返回
# fp.seek()  移动光标的位置

2.6、写操作

f.write('hello')

2.6.1、为什么不实时写入磁盘

硬盘是慢设备,频率读写会增大磁盘压力,产生瓶颈

2.6.2、什么时候会写入磁盘

1、缓存区满的时候;2、进程关闭;3、强制刷新(f.fush());4、文件关闭(f.close())

# 注意 这里是在两个bash进程之间切换使用
>>> fp = open("utf-8.txt","w")
>>> fp.write("YOU ARE SB!\n")
12
>>> fp.write("你好\n")
3# 然后我们在这边并不能够打开[root@fttsaxf rough_book]# cat utf-8.txt
[root@fttsaxf rough_book]# # 因为写入后,这些数据还在缓存里边。程序退出的时候,缓存的数据会放入进磁盘里;或者说缓存区满了,也会自动放进磁盘。>>> fp.flush()  # 强制刷新到磁盘上[root@fttsaxf rough_book]# cat utf-8.txt
YOU ARE SB!
你好# 有读缓存也有写缓存

redis是缓存。没有什么是加入中间层是解决不了的⭐⭐⭐,而这个redis就是这个中间层。

>>> fp = open("test3.txt","ab",buffering=0)
>>> fp.write(b'a')
1
#output:
"""
[root@fttsaxf rough_book]# cat test3.txt
#sf
gaj
#jhhh
ghhhhh
"""
>>> fp.write(b'\n')  # 要使用"\n"换行符之后,才会写入到磁盘中
1
#output
"""
[root@fttsaxf rough_book]# cat test3.txt
#sf
gaj
#jhhh
ghhhhh
a
"""
>>> fp.write(b'xxxx')
4
>>> fp.write(b'pppppp\n')
7

2.7、文件对象其他方法

9、python——文件操作相关推荐

  1. 初学Python——文件操作第二篇

    前言:为什么需要第二篇文件操作?因为第一篇的知识根本不足以支撑基本的需求.下面来一一分析. 一.Python文件操作的特点 首先来类比一下,作为高级编程语言的始祖,C语言如何对文件进行操作? 字符(串 ...

  2. python关闭读写的所有的文件-Python文件操作:文件的打开关闭读取写入

    Python文件操作:文件的打开关闭读取写入 一.文件的打开关闭 Python能以文本和二进制两种方式处理文件,本文主要讨论在Python3中文本文件的操作. 文件操作都分为以下几个步骤: 1.打开文 ...

  3. Python文件操作学习总结

    Python读写文件 1.open 使用open打开文件后一定要记得调用文件对象的close()方法.比如可以用try/finally语句来确保最后能关闭文件. file_object = open( ...

  4. 【Python】学习笔记总结3(Python文件操作)

    文章目录 三.Python文件操作 1.打开`open('文件名','打开模式')` 2.写操作 3.读操作 4.With上下文管理对象 小结 案例 5.文件定位 三.Python文件操作 1.打开o ...

  5. python文件操作实验总结,[干货分享]Python文件操作技巧总结

    引言 小伙伴们,今天给大家讲解一下python程序下的文件操作完整技巧梳理,都是笔者总结的干货.通过本文阅读,不仅可以带来生产力提升,也可以开发小脚本为生活带来乐趣.         首先不知道大家对 ...

  6. 关于python文件操作

    关于python文件操作 总是记不住API.昨晚写的时候用到了这些,但是没记住,于是就索性整理一下吧: python中对文件.文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块. 得到当 ...

  7. Python文件操作与函数目录

    文件操作 python文件操作 函数 Python函数学习--初步认识 Python函数学习--作用域与嵌套函数 Python函数学习--匿名函数 python内置函数 Python函数学习--递归 ...

  8. python文件操作的方法_python文件操作的方法介绍

    文件操作 1.open()函数 open()函数主要用于文件处理,一般分为下面3个过程:1.打开文件 2.操作文件 3.关闭文件 常见的格式示例:f = open('note.txt','r') f. ...

  9. python打开鼠标指定文件夹_学会python文件操作,鼠标好像没用了,学习python第10天...

    电影是人类对未来的向往,在<黑客帝国>中,我们看到了一个数字化的社会,而当你学会python文件操作,你也就离你向往的黑客近一点了,用程序来直接影响电脑上的其他文件,只需要几行代码就搞定. ...

  10. python对文件操作的相关函数_第六章、Python文件操作

    第六章.Python文件操作 Python可以对文件进行查看.创建等功能,可以对文件内容进行添加.修改.删除,且所使用到的函数在Python3.5.x为open,在Python2.7.x同时支持fil ...

最新文章

  1. Hibernate搭建成功!(源码)
  2. 【Java 基础篇】【第三课】表达式、控制结构
  3. JAVA入门级教学之(标识符与关键字)
  4. 中国约量子计算机啥水平,中国科学家捕获马约拉纳费米子 或敲开量子计算机世界大门...
  5. c语言提高,C语言提高-day2
  6. Understanding ASP.NET Validation Techniques
  7. Java Scanner 类,获取用户输入的值
  8. 新一代 FlinkSQL 平台,重新定义 Apache Flink 开发
  9. Linux USB总线驱动框架分析
  10. QQ空间 1314学习网的日志 神奇的图片
  11. CRMEB制作docker-compose
  12. html css依赖管理,composer 管理js css等依赖文件【fxp/composer-asset-plugin】
  13. SqlCommandBuilder 批量更新数据库的怪异问题?
  14. 模仿京东登录页面(HTML、CSS、JavaScript / jQuery)
  15. 比特大陆“政变”72小时
  16. 23、账号与权限管理
  17. 服务器能进系统滴滴响,主机报警连续响个不停
  18. 做人的最高境界是厚道
  19. 决策树ID3、C4.5这两种算法的特点?为什么使用C4.5要好?
  20. 5点聊透技术领导力本质

热门文章

  1. 苹果x和xsmax有什么区别_苹果三种不同开发者详细区别在哪?为什么有三类帐号?...
  2. Prisma(二)——Existing database
  3. deepl翻译器中文版
  4. 用SpreadJS实现在线Excel的录入与展示,提升企业医保信息化服务水平
  5. 如何理解宋冬野安河桥里面的那句抱着盒子的姑娘,擦汗的男人?
  6. 什么时候是世界末日?Unix的世界是2038年1月19日
  7. (二十九)期货合约的定价
  8. IDEA下载依赖时提示 resolving dependencies of xxx, yyy
  9. HTML文件图标异常Chrome,win7系统任务栏中chrome图标显示异常的解决方法
  10. css white-space属性详解