Moudle 2 1.鸡汤
中国人均阅读4.35本;日本40本;韩国17本;法国20本;以色列60本
成长的路上需要读书,坚持读书内心会得到升华的
想法不要太多,尽量多读书,多充电
多读书,多看报,少吃零食,多睡觉

【2.三元运算】
三元运算又称为三目运算,是对简单的条件语句的简写,节省代码量,但是不易读
简单条件语句
if 条件成立:
val = 1
else:
val = 2
改成三元运算:
val = 1 if 条件成立 else 2

【3.文件处理】
在平时,假如给你一个文件你会怎么去操作,如何查看内容?
用文本的编辑器打开就完事了。
1.首先,你得有一个文本编辑器,安装一个文本编辑器
2.选中右键,然后用文本编辑器打开文件
3.查看文件内容或者写入任何的内容
4.保存文件,关闭
好了,我们用python去做吧
文件操作分为读、写、修改,我们先从读开始
f = open(file = 'E:/文件夹名字/filename.txt',mode = 'r', encoding = 'utf-8')
data = f.read()
f.close()
----mode 模式就是需要用什么方式去读取文件,就像mode = 'r'就是只读模式
----encoding 就是用什么编码模式去操作,在内存里保存的编码方式
----file 参数可以不写,默认就会在第一个参数里写文件名,不用绝对路径就是相对路径
文件操作打开后报错了,UnicodedeDecodeError : 'utf-8' code can't decode byte....
数据、文件内容在硬盘上是二进制的格式,读到内存里是转换编码的,所以读到字符里是有转换关系的
字符编码表有很多种,如果这个文件本身是GBK的编码格式编制的,然后用UTF-8的格式再打开就会报错了
GBK里的二进制的编码表对应不上utf-8的编码表,就会出现乱码,或者报错
一定要记住是什么方式去存储的文件,然后要用同样的方式去打开文件,
如果不指定的话,Pyhton3就会按照默认的方式('utf-8')去打开文件
如何解决编码的错误呢?
必须按照文件的原来的编码的格式,用python的方式指定编码格式去读取文件
[ps]Pycharm打开文件会自动检测文件的原编码格式哦

【4.文件处理-二进制模式】
encoding就是告诉python指定什么编码模式转换成Unicode,python3里所有的字符串都是Unicode
如果不知道文件的编码格式怎么办?
mode = 'rb' 把这段内容直接用二进制的模式读入到内存中,不需要转码,硬盘怎么存的就怎么取出来
如果mode模式是二进制打开的模式,就不需要再指定文件的编码模式了,否则还容易报错
文件打开就是二进制的编码格式了,用二进制的模式打开场景,是因为不需要给人去阅读的,是直接给机器处理的

【5.文件处理-智能检测编码的工具】
在打开文件前还不知道是什么编码的,编码对应数字,不涉及文件头,一段二进制串,如果是10个字节,就永远不能是utf-8格式
因为utf-8是3个字节,这些就是可以遵循的规律,第三方的工具箱可以动态的检测文件的可能的编码模式
rb模式打开了文件,rb是指二进制模式,数据读到内存里直接就是bytes格式,如果想看内容,还需要手动decode
因此在文件的打开阶段,不需要指定编码
如果你不知道文件的编码格式怎么办呢?
第三方库:chardet

import chardet
f = open('filename',mode = 'rb')
data = f.read()
f.close()
result = chardet.detect(open('log',mode = 'rb').read())
print(result)

示例

encoding>>编码格式

confidence>>0.99

language>>语言格式

安装第三方的工具包 >>命令行pip install chardet或者pip3 install chardet
人工智能检测都是通过机器学习

【6.文件处理-写模式操作文件】
如果文件特别大,用read就会把整个文件读到内存中,很容易撑爆内存
有没有方法可以简单高效的处理文件的读取呢?比如边读边处理,循环一点一点读取文件内容

f = open ("filename","r",encoding = "utf-8")
for line in f:
print(line)
f.close()

一次取一行

为什么文件打印会有空行呢?
是因为文件在read的时候就是有隐藏的"\t","\n",循环的时候print就会自动的给line后加上换行的字符,文件中本身就有换行符,所以就导致多换了一行

f = open("filename", mode = "w", encoding = "utf-8")
f.write("something")
f.close()

写文件

注意:
1.一定要注意文件的本身的编码格式
2.文件编码格式的互相转换

f = open("filename", mode = "wb", encoding = "utf-8")
f.write("something")
f.close()

写文件的二进制格式

w模式永远是创建一个新文件,如果之前有相同的文件名,就会对这个文件进行覆盖!清空内容后再写
w模式一定要检测是否有重复的文件

【7.文件处理-追加模式操作文件】

f = open("filename", mode = "a", encoding = "utf-8")
f.write("\nname where number")
f.close()

把内容追加到文件的尾部

【8.混合操作文件】

文件的操作可以读取,可以写入,那么是不是可读可写的呢?
当模式就是读取的时候,文件就不能写入了,同样的,当模式就是写入的时候,也不能读取
那怎么才能让文件既能读取又能写入呢?
当然是有的,既能写又能读的模式--读写混合

f = open("filename", mode = "r+", encoding = "utf-8")
data = f.read()
print(data)
f.write("\nsomething notgood 11111111")
f.close()

读写混合模式

这个模式就是既可以读取又可以写入的
不是文件读取完了以后就可以再读一遍的,文件会先读取你的光标的位置,在最开头读取,读取直至你的文件的最后一行
每写一行光标机会后移一次,再read就会再从光标的位置继续出发再读取

f = open("filename", mode = "w+", encoding = "utf-8")
data = f.read()
print(data)
f.write("\nsomething notgood 11111111")
f.close()

写读混合模式

读写模式是先读后写,写读模式是以写的模式,创建的模式打开,再读取文件
尽量不要用写读模式

【9.文件处理-文件操作做其他功能】
文件操作的其他方法

def fileno(self,*args,**kwargs):
返回文件句柄在内核中的索引值,以后做IO多路复用时可以用到(网络编程模块使用)
def flush(self,*args,**kwargs):
把文件从内存buffer(缓存)里强制刷新到硬盘
内存的读取速度比硬盘快太多了,文件操作就具有缓存的功能,flush就是强制刷新内存的数据到硬盘
def readable(self,*args,**kwargs):
判断文件是否可读(Linux上一切皆文件,用来判断文件是否是正常的文件,一般用不到,mode = “w”就是不可读的)
def realine(self,*args,**kwargs):
只读一行,遇到\r or \n为止
def seek(self,*args,**kwargs):
把操作文件的光标移到指定位置,seek取到的光标位置是根据文件的字节去找,read才是按文件的字符取读取
注意seek的长度是按字节算的,字符编码存每个字符所占的字节长度不一样
如“路飞学城”用gkb是2个字节一个字,用utf-8就是3个字节,因此以gbk打开时,seek(4)就把光标切换到飞
但是如果是utf-8,seek(4)会导致拿到了“飞”这个字的一部分字节,打印的话就会报错,因为处理剩下的文本时发现用不了
def seekable(self,*args,**kwargs):
判断文件是否可进行seek操作,二进制文件都可以seek,Linux上有的特殊文件就是不能seek的
def tell(self,*args,**kwargs):
返回当前文件操作的光标位置
def truncate(self,*args,**kwargs):
按指定长度截断文件,从当前位置开始截断,既可以截断部分,也可以
指定长度的话,就从文件开头开始截断指定长度,不指定长度的话,就从当前位置到文件尾部的内容全部去掉
def writeable(self,*args,**kwargs):
判断文件是否可写

常用方法

file.isatty()
如果文件连接到一个终端设备返回 True,否则返回 False。

【不常用功能】

10.文件处理-文件修改功能】
修改文件,尝试直接以r+模式打开文件,默认会把新增的内容追加到文件的最后面,但是怎么在文件的中间部分添加内容呢?
使用seek方法,让光标移动到文件的中间部分,就可以再之后再增加啦

f = open("filename","r+",encoding ="utf-8" )
f.seek(6)
f.write("[路飞学城]")
f.close()

示例

这个示例就是会覆盖文件的原数据,是不能往后移动的
因为这个文件本身是从硬盘里读到内存的,这个文件从开始创建到结束就都已经写到硬盘里了,想要把文件中间插入内容是不行的
这就是硬盘的存储原理,当然可以直接修改啦,除非你的文件修改的字节是一样的
那为什么其他的word或者excel等可以修改呢
其实他们也没有修改啦,大文件就是会把所有的数据全部加载到内存中,所以响应时间慢,全部加载内存中就可以增删改查了,然后再重新写入硬盘
文件特别大的情况下会不会撑爆内存呢?有没有节省内存的方式呢?
会!文件大就会内存读取不了,当然可以,就是一点一点的读取文件,边读边修改,写入一个新的文件,不占内存但是占硬盘
重命名文件的方式
使用OS模块
os.rename(new_filename, old_filename)
将新文件名替换成老文件名

路飞学城Python-Day7的更多相关文章

  1. 路飞学城—Python爬虫实战密训班 第三章

    路飞学城—Python爬虫实战密训班 第三章 一.scrapy-redis插件实现简单分布式爬虫 scrapy-redis插件用于将scrapy和redis结合实现简单分布式爬虫: - 定义调度器 - ...

  2. 路飞学城—Python爬虫实战密训班 第二章

    路飞学城—Python爬虫实战密训班 第二章 一.Selenium基础 Selenium是一个第三方模块,可以完全模拟用户在浏览器上操作(相当于在浏览器上点点点). 1.安装 - pip instal ...

  3. 路飞学城Python爬虫课第一章笔记

    前言 原创文章,转载引用务必注明链接.水平有限,如有疏漏,欢迎指正. 之前看阮一峰的博客文章,介绍到路飞学城爬虫课程限免,看了眼内容还不错,就兴冲冲报了名,99块钱满足以下条件会返还并送书送视频. 缴 ...

  4. 路飞学城-Python开发集训-第3章

    学习心得: 通过这一章的作业,使我对正则表达式的使用直接提升了一个level,虽然作业完成的不怎么样,重复代码有点多,但是收获还是非常大的,有点找到写代码的感觉了,遗憾的是,这次作业交过,这次集训就结 ...

  5. 路飞学城-Python开发集训-第1章

    学习体会: 在参加这次集训之前我自己学过一段时间的Python,看过老男孩的免费视频,自我感觉还行,老师写的代码基本上都能看懂,但是实际呢?....今天是集训第一次交作业的时间,突然发现看似简单升级需 ...

  6. 路飞学城-Python开发集训-第4章

    学习心得: 学习笔记: 在python中一个py文件就是一个模块 模块好处: 1.提高可维护性 2.可重用 3.避免函数名和变量名冲突 模块分为三种: 1.内置标准模块(标准库),查看所有自带和第三方 ...

  7. 路飞学城-Python开发集训-第2章

    学习心得: 这章对编码的讲解超级赞,现在对于编码终于有一点认知了,但还没有大彻大悟,还需要更加细心的琢磨一下Alex博客和视频,以前真的是被编码折磨死了,因为编码的问题而浪费的时间很多很多,现在终于感 ...

  8. 路飞学城-Python开发-第二章

    ''' 数据结构: menu = { '北京':{ '海淀':{ '五道口':{ 'soho':{}, '网易':{}, 'google':{} }, '中关村':{ '爱奇艺':{}, '汽车之家' ...

  9. 路飞学城-Python开发-第三章

    # 数据结构: # goods = [ # {"name": "电脑", "price": 1999}, # {"name&quo ...

  10. 路飞学城-Python开发-第一章

    # 基础需求: # 让用户输入用户名密码 # 认证成功后显示欢迎信息 # 输错三次后退出程序 username = 'pandaboy' password = ' def Login(username ...

随机推荐

  1. Android 数字四舍五入

    BigDecimal b = new BigDecimal(hour).setScale(1, BigDecimal.ROUND_HALF_UP); setScale(int newScale, in ...

  2. Sublime 是自动检测而非自动设置缩进

    以为是自动设置规范化的缩进 以前一直认为是:识别出文件类型后,设置统一的缩进规范.比如说 识别为CSS,就把缩进设成2个空格 其实是自动检测然后与你保持统一 亲测发现,根据你文本里用的是几个空格的缩进 ...

  3. WiFi相关基础概念

    转自:https://blog.csdn.net/lbaihao/article/details/73250798 一.WiFi相关基础概念 1.什么是wifi 我们看一下百度百科是如何定义的: Wi ...

  4. 路飞学城Python-Day48

    49-清除浮动1:给父盒子设置高度 给父盒子设置高度,这种方式不灵活,公司的产品修改的时候,要求父盒子高度变大, 不可能去手动修改 尽量不要给父元素去修改高度,不建议这样的方式 <!DOCTYP ...

  5. 路飞学城Python-Day19(practise)

    # 特性1.继承:2.多态:3.封装 # 1.继承的用处:通过继承就可以解决类与类之间的代码冗余关系 # 2.多态的用处:1.增加了程序的灵活性,以不变应万变,使用者都是同一种形式去调用(func(a ...

  6. [置顶] openHAB 部分代码结构 UML 图

    openHAB 部分代码结构 UML 图 ModelRepository: ItemRegistry: ItemUIProvider: WebAppServlet:

  7. 小程序(Wepy)--生成海报图片

    对于小程序的分享, 除了分享给朋友, 好友群,是可以直接做到的, 但是要想扩大推广范围, 通过生成海报图片, 将自己小程序码带进去,应该是目前我所知的好办法了. 但是海报也不是那么好搞.之前自己手写出 ...

  8. CF1042F Leaf Sets (贪心+树上构造)

    题目大意:给你一棵树,让你对叶节点分组,保证每组中,任意两个叶节点之间的距离不大于K,求最小的组数 手动yy的贪心竟然对的 对于每个节点,维护一个$ma[i]$,表示在$i$节点的子树内 未被分组的叶 ...

  9. Linux下实时查看GPU状况

    1. 显示当前GPU使用情况 Nvidia自带了一个nvidia-smi的命令行工具,会显示显存使用情况: $ nvidia-smi 输出如下: 2. 周期性输出GPU使用情况 但是有时我们希望不仅知 ...

  10. [剑指offer] 5. 用两个栈实现队列+[剑指offer]30. 包含min函数的栈(等同于leetcode155) +[剑指offer]31.栈的压入、弹出序列 (队列 栈)

    c++里面stack,queue的pop都是没有返回值的, vector的pop_back()也没有返回值. 思路: 队列是先进先出 , 在stack2里逆序放置stack1的元素,然后stack2. ...