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右下角会自动给你检测的;
那咱们就不指定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**
- 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)
- 经过上述咱们能够知道什么的编码了,而后就能够经过具体的编码来看了;** 备注 **以上文件的路劲都是本身的本地,若是须要练习,你们能够本身创造文件;
f=open('D:/Users/tufengchao/Desktop/test123','r',encoding='utf-8') for line in f: print(line) f.close()
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()
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()没有打印出来对应的插入的内容,3d
不是每次读完了,都从新读,就相似一个光标,光标在开始时候光标在第一个位置,而后read以后光标在最后,而后写的时候,结果光标又定位在最后了,因此读的时候从光标的位置日后读,全部读出来的结果就是空的,没有读出来;code
写读模式: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=("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):
把文件的光标移动到制定的位置;
- read()是按照字符来读的,tell()和seek()是按照字节来的
- 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)