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. GRpc-Proto3语法

        syntax = "proto3"; 文件的第一行指定了你使用的是proto3的语法:如果你不指定,protocol buffer 编译器就会认为你使用的是proto2的语 ...

  2. css样式表格边框1px hover时为2px 实现方式

    //css .flclass-cont .flclass-cont-box{width:%;display:inline-block;font-size:;margin:10px;position:r ...

  3. swift使用查阅资料备份3

    自主学习之RxSwift(二) -----flatMap https://blog.csdn.net/chelongfei/article/details/50995603 RxSwift 系列(九) ...

  4. 通过adb 设置、删除、获取 系统配置值。

    通过adb 设置.删除.获取 系统配置值. Key定义在:frameworks\base\core\java\android\provider\Settings.java adb shell sett ...

  5. DRF lazy Serializer

    class LazySerializer: def __init__(self, cls_name, **kwargs): self.cls_name = cls_name self.kwargs = ...

  6. python之静态属性、类方法、静态方法

    静态属性.类方法.静态方法 1. 静态属性:在函数前加@property,将函数逻辑”封装“成数据属性,外部直接调用函数名,如同调用属性一样.这个函数是可以调用类和实例的属性的,    静态属性的作用 ...

  7. 关于npm警告fsevents和vue-cli项目中的一些问题,持续更新

    1.install一个npm包的时候,总是会报这个警告: 网上查资料知道,这个fsevents是mac下用的,windows忽略即可: 2.关于在main.js中引入less文件的问题, 就会报这个错 ...

  8. freeswitch GUI界面(portal)

    1.控制台 加载模块 load mod_xml_rpc 2.ip:8080/portal 进行登录  账号 : freeswitch  密码 : works 让模块随着freeswitch启动进行加载 ...

  9. JavaScript 实现留言框

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  10. NOIP2018提高组省一冲奖班模测训练(四)

    NOIP2018提高组省一冲奖班模测训练(四) 这次比赛只AC了第一题,而且花了40多分钟,貌似是A掉第一题里面最晚的 而且还有一个半小时我就放弃了…… 下次即使想不出也要坚持到最后 第二题没思路 第 ...