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. 打包phar文件过大的问题。

    根据一个开源工具得到的灵感,使用流打包,并使用token_get_all移除了所用PHP文件的空白.现在打包出来只有93k了.谢谢关注. 我一个简单的文件,加上一个symfony的process包,打 ...

  2. PHP关于注册注意的问题

    1.注意转义字符的问题 get_magic_quotes_gpc()开启时,所有的 ' (单引号), " (双引号), \(反斜线) and 空字符(null)会自动转为含有反斜线的溢出字符 ...

  3. Kattis - Babelfish

    Babelfish You have just moved from Waterloo to a big city. The people here speak an incomprehensible ...

  4. Kattis - Association for Computing Machinery

    Association for Computing Machinery ACM (Association for Computing Machinery) organizes the Internat ...

  5. Airtest ——poco

    1.  Pymysql(No module named ‘cryptography’) pip install cryptography pip install paramiko 把 cryptogr ...

  6. Is jQuery Still Relevant in 2018?

    DOM Selection $('.someclass') document.querySelector('.someclass') document.querySlectorAll('.somecl ...

  7. BZOJ 3307 雨天的尾巴 (树上差分+线段树合并)

    题目大意:给你一棵树,树上一共n个节点,共m次操作,每次操作给一条链上的所有节点分配一个权值,求所有节点被分配到所有的权值里,出现次数最多的权值是多少,如果出现次数相同就输出最小的. (我辣鸡bzoj ...

  8. maven 测试写入JRE参数

    项目在测试时碰到一个问题,就是JVM加载参数的问题. web项目本身在注入配置信息的时候,读取的是本地的配置文件,但是配置文件的位置是卸载tomcat 里面配置的JAVA_OPTS里面的. 问题出现了 ...

  9. servlet调用的几种方式

    參见 文库/java/javaEE全新学习教程2.2节 1.通过URL调用 2通过提交表单 3超链接 4 javascript写一个函数,调用这个函数 1,首先在project的WebRoot目录下建 ...

  10. [IOS]mac远程window全屏显示

    在mac自带着一个远程window的软件.这让我们远程起来很方便. 其步骤和window远程也很相似. 输入ip地址: 输入username以及password: 然后点击确定就可以. 只是.这时就出 ...