• 列表项

三元运算符号:

a=3
b=7
val=a if a>b else val=b
print(val)

文件处理

首先给你一个文件,或者自己建立一个文件,那如何查看文件的内容呢?

1.安装个文本编辑器

2.选中右键,利用文本编辑器软件打开

3.查看OR写入

4.保存关闭

正常的文件如上面的步骤,怎么用Python打开这个文件,修改删除

1.怎么样用Python读一个文件;(自己在桌面建了一个文件叫test123)

f =open(file='D:/Users/tufengchao/Desktop/test123',mode='r',encoding='utf-8')
data = f.read()
f.close()
  • file是路径
  • mode 是打开的模式,r-读,w-写,rb-二进制
  • encoding 编码格式
  • read() 是读一个文件
  • close()是读了一个文件然后关闭

  • 这里解释一下这个问题,首先我们的文件在硬盘里面是以二进制存储格式,最终读到内存是不是要转换我们能看懂的东西,从二进制转化为我们能看懂的内容,是有个对应的关系的,是按照字符编码来的,这个文件是按照gbk存储的,结果读的时候是按照utf-8来读的,所以在对应的编码表里面找不到对应的关系;
  • 我们平时使用的Word,也是这样的,只是微软帮你转换好了,小白用户是看不到这里面的转换的,直接使用就OK了
  • 在Python里面,你一定要记住你自己的文档是什么格式的,读的时候用什么格式的读,你要告诉Python你之前的是什么格式,要以什么格式打开,如果不指定,Python3默认的编码格式就是utf-8,(只要出现上述的报错,就是编码格式错误);
  • 如果不知道自己的文件原来的编码格式可以使用pycharm打开,pycharm右下角会自动给你检测的;

文件处理二进制模式:

python3里面所有的字符都是utf-8的形式,如果在打开一个文件的时候我不知道这个编码怎么办?

那我们就不指定encoding的编码,那么Python3默认就是utf8但是这样也不行,同时我们要改变读的模式,才可以,r就是文本模式,可以直接读取字符串的,如果用户不知道文件的格式的话可以不指定编码格式,同时直接使用rb的模式,就是硬盘怎么存储的你就怎么存到内存,直接以二进制的形式,就可以了;

f=open(file='D:/Users/tufengchao/Desktop/test123',mode='r',encoding='utf-8')
data=f.read()
print(data)
  • 如上述我指定了编码格式会报错:binary mode doesn't take an encoding argument
f=open(file='D:/Users/tufengchao/Desktop/test123',mode='r',)
data=f.read()
print(data)
  • 以上则不会报错
  • 基本二进制就是不给人家看的,例如视频的格式,等等就是二进制的;
  • 基本来说 rb的模式就是不给人看的,就是网络传输用的,硬盘里面存的是什么读出来的就是什么;

以上如果用户就是想看呢,怎么办呢?二进制的传来传去的最终有人会使用这个文件的,不管什么文件传来传去如果记不得什么格式怎么办呢?

  • 问题:在传输的时候对方不知道是以什么格式传给用户,传来传去彼此都忘了什么格式:
在编码的时候:utf8:是3个字符,gbk是2个字符,每个字符数字对应的字符,一段2进制串,如果10个字节全部都是中文,永远不能是utf-8,但是又要存成中文,就只能是gbk了,第三方的工具箱,会自动检测这段文字是什么编码。
我们需要用到一个第三方的工具包叫:**chardet**

教大家如何安装chardet

  • pip3 install chardet
  • 然后代码输入:
import chardet
f= open('log',mode='rb')
data=f.read()
f.close()
result=chardet.detect(open('log',mode='rb').read())
print(result)
  • 通过上述我们可以知道什么的编码了,然后就可以通过具体的编码来看了;** 备注 **以上文件的路劲都是自己的本地,如果需要练习,大家可以自己创造文件;

文件处理写模式操作文件:

  • 如果文件特别大,一read就全部读出来,如果内存小怎么办?

    1.可以不可以每次读一点,然后丢掉一点,然后在读一点?答案是当然可以了
f=open('D:/Users/tufengchao/Desktop/test123','r',encoding='utf-8')
for line in f:
print(line)
f.close()

  • 如上述的代码执行的结果中,竟然每行下边会有空格,为什么会有空格呢?

    1.因为prit本身就会换行;如上述的代码换成:
f=open('D:/Users/tufengchao/Desktop/test123','r',encoding='utf-8')
data=f.read()
print(data)

就不会有问题了,

如果是:

for line in f:
print(line)

就会换行

写文件:

f=open('D:/Users/tufengchao/Desktop/test123','w',encoding='utf-8')
f.write('老北京科技大学,微信号:xxx')
f.close()

如上述就是写的格式,(备注:文件可以自行准备,写的内容可以自己写入,同时这里面的编码要根据你要编写的文件的编码格式,并不是所有文件都是utf8,有可能是gbk等等)

f=open('D:/Users/tufengchao/Desktop/test123','wb')
f.write('第二梦')
print(f.read())

会发现,之间的文件内容,现在只有:“第二梦”了

w不是修改,是创建了一个新的文件名字,如果和原来的旧文件有名字一样,原来的文件就是清空,如果是文件名字不一样就是新建,所以我们要是小心使用:w

追加模式

  • 如果对一个文件我要修改一个条,或者追加一个内容:
f=open('D:/Users/tufengchao/Desktop/test','a',encoding='utf-8')
f.write('我要追加哈哈!!!!')
f.close()
  • 注意:文件操作的时候,以 “a” 或者“ab”模式打开,则只能追加,即:在原来的内容尾部追加内容
  • 写入硬盘时候,必须是:0101010101,打开时候需要注意:
  • ab,写入时,需要直接传入以某种编码的010101010 ,即:字节类型
  • a 和encoding 写入时需要传入Unicode字符串,内部会根据encoding制定的编码将Unicode字符串转换为该编码的01001010101

读写混合模式

  • r+ 就是读写混合模式:
f=open('D:/Users/tufengchao/Desktop/test','r+',encoding='utf-8')
data=f.read()
print(data)
f.write('混合模式啦!!!!')
data1=f.read()
print(data1)
f.close()
  • 注意上述的第二个,read()没有打印出来对应的插入的内容,

  • 不是每次读完了,都重新读,就类似一个光标,光标在开始时候光标在第一个位置,然后read之后光标在最后,然后写的时候,结果光标又定位在最后了,所以读的时候从光标的位置往后读,所有读出来的结果就是空的,没有读出来;

  • 写读模式:w +

  • 读写和写读 听上去是一样的,其实完全不一样,读写模式:先读写,写读:是写模式打开,是写打开写,然后在读;(写:可以把原来的覆盖掉的)

  • w+基本上应用场景比较少;

文件操作的其他的基本功能:

def fileno(self,args,**kwargs):返回文件句柄在内核中的索引值,以后做IO多路复用的时候可以用到;

def flush(self ,
args,**kwargs):把文件从内存buffer里面强制刷新到硬盘上,例如:

f=("f_flush_test.txt",'w')
f.write("\ntest")
  • 这时候打开文件f_flush_test.txt,发现是空白的:why?
  • 主要是写入的内容会先存入内存,然后在从内容写入硬盘,因为存入内存要比写入硬盘快很多;
  • 如上述的代码后边加入:f.close()就可以在文件f_flush_test.txt这个文件里面看到了;so每写一个字符都要往硬盘里面写的话会让速度很慢,所以就搞了个缓存功能,buffer,这个是可以改的,满了就会刷到硬盘里面,

    1.如果数据特别的大,但是有突然断电了这个怎么办呢?

    2.默认是buffer满了自动刷,现在要求强制刷,有没有这么的功能呢?
f=("f_flush_test.txt",'w')
f.write("\ntest")
f.flush()

3.这时候打开文件是不是就有了刚才写的内容了;

def readable(self ,args ,**kwargs):判断是否可读

def readline(self ,
args,kwargs):只读一行,遇到\r or \n为止

def seek(self ,*args ,
kwargs):

把文件的光标移动到制定的位置;

  • 注意:seek的长度是按照字节算的,字符编码存每个字符所占的字节长度不一样。
  • 如:我爱祖国,用gbk存就是2个字节,用utf-8存就是3个字节,因此以gbk打开时,seek(4)光标就会定位在“爱”之后
  • 如果是utf-8,seek(4)会导致,拿到“爱”这个字的一部分字节,打印的话会报错,因此处理剩下的文本时发现用
  • def seekabale(self,*args,**kwargs)判断文件是否可以进行seek操作
  • def tell(self,*args,**kwargs)返回当前文件操作的光标位置
  • read()是按照字符来读的,tell()和seek()是按照字节来的
  • def truncate(self,*args,**kwargs)按照指定的长度截取文件
  • def writable(self,*args,**kwargs)判断是否可以写
  • word 在读取大文件的时候会慢,是因为他把硬盘的文件全部读取到内存,然后在内存中进行增删改查,在内存中就可以随便的修改了,就像列表一样,可以随意的修改东西;
  • 文件特别的大,会不会内存爆掉呀?
  • 有没有即不爆掉内存,又可以存到内存,我可以边读边修改,先读出来一点,然后检测一下是否修改,如果修改,就修改了放到新文件,如果不修改,就直接放到新文件里面,从一边读往一边写,这样就不会占内存了,就多站点硬盘;
f_name='f_test.txt'
f_new_name ='%s.new' %f_name
old_str='wo'
new_str='haha'
f=open(f_name,"r",encoding='utf8')
f_new =open(f_new_name,"w",encoding='utf-8')
for line in f:
if old_str in line:
line=line.replace(old_str,new_str)
f_new.write(line)
f.close()
f_new.write(line)
f.close()
f_new.close()
os.rename(f_new_name,f_name)

python文件操作之二进制的更多相关文章

  1. Python基础篇【第2篇】: Python文件操作

    Python文件操作 在Python中一个文件,就是一个操作对象,通过不同属性即可对文件进行各种操作.Python中提供了许多的内置函数和方法能够对文件进行基本操作. Python对文件的操作概括来说 ...

  2. [Python学习笔记][第七章Python文件操作]

    2016/1/30学习内容 第七章 Python文件操作 文本文件 文本文件存储的是常规字符串,通常每行以换行符'\n'结尾. 二进制文件 二进制文件把对象内容以字节串(bytes)进行存储,无法用笔 ...

  3. day8.python文件操作

    打开和关闭文件 open函数 用Python内置的open()函数打开一个文件,创建一个file对象,相关的方法才可以调用它进行读写. file = open(file_name [, access_ ...

  4. Python之路Python文件操作

    Python之路Python文件操作 一.文件的操作 文件句柄 = open('文件路径+文件名', '模式') 例子 f = open("test.txt","r&qu ...

  5. Python文件操作:文件的打开关闭读取写入

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

  6. 第十二章 Python文件操作【转】

    12.1 open() open()函数作用是打开文件,返回一个文件对象. 用法格式:open(name[, mode[, buffering[,encoding]]]) -> file obj ...

  7. 第九章 Python文件操作

    前一阵子写类相关的内容,把老猿写得心都累了,本来准备继续介绍一些类相关的知识的,如闭包.装饰器.描述符.枚举类.异常等,现在实在不想继续,以后再开章节吧.本章弄点开胃的小菜提提神,介绍Python中文 ...

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

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

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

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

随机推荐

  1. 使用Fiddler获取手机app数据

    参考资料:https://www.jianshu.com/p/9e05a2522758 Fiddler下载地址   https://www.telerik.com/download/fiddler

  2. RHEL yum

    一.YUM源配置 使用RHEL自带的yum时会显示 #This system is not registered to Red Hat Subscription Management. You can ...

  3. java判断字符串中是否包含中文 过滤中文

    package com.test; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Test ...

  4. py库: pyautogui (自动测试模块,模拟鼠标、键盘动作)

    PyAutoGUI 是一个人性化的跨平台 GUI 自动测试模块 pyautogui 库 2017-10-4 pip install pyautogui python pip.exe install p ...

  5. AWS 相关阅读

    http://www.infoq.com/cn/articles/aws-s3-dive-in http://baike.baidu.com/link?url=Jo9OQmjxXZLxyhc6JvaD ...

  6. zookeeper(4)--zookeeper分布式锁原理

    目前几乎很多大型网站及应用都是分布式部署的,分布式场景中的数据一致性问题一直是一个比较重要的话题.分布式的CAP理论告诉我们“任何一个分布式系统都无法同时满足一致性(Consistency).可用性( ...

  7. 我的母校zbvc试做

    一.观察分析页面布局 可以从上至下分为6大部分 logo栏 menu菜单栏 slide幻灯片 news新闻区域 other其他 bottom底部 二.logo 分为三部分 ①左侧logo ②中间log ...

  8. jquery 属性-记住

    $("").attr(); $("").removeAttr(); $("").prop(); $("").remove ...

  9. 5分钟快速打造WebRTC视频聊天<转>

    原文地址: 5分钟快速打造WebRTC视频聊天 百度一下WebRTC,我想也是一堆.本以为用这位朋友( 搭建WebRtc环境 )的SkyRTC-demo 就可以一马平川的实现聊天,结果折腾了半天,文本 ...

  10. 批量杀死多个进程 linux kill

    批量杀进程 -| “grep -v grep”是在列出的进程中去除含有关键字“grep”的进程. “cut -c 9-15”是截取输入行的第9个字符到第15个字符,而这正好是进程号PID,也有使用aw ...