python 文件与类型
文件
特别不好意思,最近变懒了,都不好意思跟我老师👨🏻🏫联系了,(没脸)🙈。再这样下去跟咸鱼有什么区别?还能不能翻身农奴把歌唱了!啊?!—— 来自一名党员同志的反思和自我批评 ✍️✍️。
- 不浪费时间了,主题博客action!
- 创建一个对象,链接到本机上,用python内置好的方法👉:
基本语法:
基本操作:
- read() 2. readline() 3. readlines() 4. close()
1. 创建一个对象
>>> myfile=open('hi.txt','w') # 创建一个文件,模式选择w,也就是写入内容
-
那么如何在pycharm中找到这个文件呢?
-
那就是
在当下的pycharm文件夹下点击当前文件夹一下,咋跟老师讲的不一样呢?估计版本升级了,试出来的。相当于"synchronize"(同步刷新)一下当前文件夹。
2. 对文件进行相应的mode(模式)处理(write,read,append…)
* --------- ① write 写入内容
>>> myfile=open('hi.txt','w')
>>> myfile.write('你好,我的世界\n')
8 # 返回“8”表明写入8个字符
>>> myfile.write('hi,my world')
11 # 同理
>>> myfile.close() # 注意有一个结束句
- 现在如何看到“hi.txt”中是否真的已经写入内容了呢?
- 接着在此点击或者双击当前文件夹,则在hi.txt中文件内容便synchronize(同步)出来。
- 如果在创建的对象中写入内容后出现乱码现象,可以在创建文件之处就设置出编码类型“utf8”(其实具体这是啥咱也不是很清楚😆,反正比着葫芦画瓢这事儿我在行),代码如下:
>>> x = open('hello.txt','w',encoding='utf8')
>>> x.write('加入编码,防止乱码\n')
10
>>> x.write('including encoding')
18
>>> x.close()
运行结果:
- 将某些类型数据写入新创建的对象
>>> a,b,c=1,2,'nice'
>>> d=[3,4,5]
>>> y = open('data1.txt','w')
>>> y.write('{},{},{}'.format(a,b,c)) # 利用占位符
8
>>> y.write('\n')
1
>>> y.write(str(d))
9
>>> y.close()
* --------- ② read 读取内容
>>> f = open('hi.txt')
>>> f.read()
'你好,我的世界\nhi,my world'
>>> f.read()
''
- read在这里是相当于一个指针,如果用.read(),则一次性读取所有内容,再一次读取时,就会返回空值。意思是刚已经读完了,再也读不出新的东西来了!
那么
,如何一行一行地读取出来呢?
>>> f = open('hi.txt')
>>> f.readline()
'你好,我的世界\n'
>>> f.readline()
'hi,my world'
>>> f.readline()
''
- 如此便实现了一行行读取,但这种.readline()需要不断写入读取代码.有点麻烦,怎么一次性输出所有行呢?这里可以借助列表list:
>>> l = open('hi.txt').readlines()
>>> l
['你好,我的世界\n', 'hi,my world']
- .readlines()有什么特殊之处呢?注意,l与f的区别是,l不仅open hi.txt,读取内容,还将读取的内容以列表的形式放入l当中。
- 再利用for循环,将列表内容按照行打印出来:
>>> for line in l:
... print(line) # 将每一行打印出来
...
你好,我的世界
hi,my world
- 再比如,读取写入多种类型数据地data1.txt:
>>> character = open('data1.txt').read()
>>> character
'1,2,nice\n[3, 4, 5]'
扎堆了不好看,可以再用.split() 切割
>>> character.split('\n') # 以换行符为标志分割字符串
['1,2,nice', '[3, 4, 5]']
* --------- ③ pickle模块的读写和存储
>>> d={'a':1,'b':2}
>>> f=open('data2.pkl','wb')
>>> import pickle
>>> pickle.dump(d,f)
>>> f.close()
>>> open('data2.pkl','rb').read()
b'\x80\x03}q\x00(X\x01\x00\x00\x00aq\x01K\x01X\x01\x00\x00\x00bq\x02K\x02u.' # 读取的是二进制
- 那么怎么让读出来的内容是原样子的呢?
>>> f = open('data2.pkl','rb')
>>> data = pickle.load(f) # pickle模块本身的load功能,从文件当中载入
>>> data
{'a': 1, 'b': 2}
* --------- ④ with对文件的临时调取与存储
将文件中的内容调取出来存储,如果用“f = open(‘hi.txt’)”+“l = open(‘hi.txt’).readlines()”,通常会忘记对文件进行close,后续可能会引发一系列的问题。于是用“with”临时调取,随取随关的模式就方便多了。
代码如下:
>>> with open('hello.txt') as f: # 打开这个文件临时取一个名称叫f,联系上下文的作用
... for line in f.readlines():
... print(line) # 注意缩进
...
加入编码,防止乱码
including encoding
3. 总结
* --------- ① 文件的具体操作
存取Python对象 pickle:写对象 dump(对象,目标文件),读对象 read(目标文件)
* --------- ② 文件的中的集合和数字汇总
* 当然文件中还会涉及可调用(函数 function,生成器 Generation,类class及方法)及其他,后续学习面向对象的时候再总结吧!
所以
长风破浪会有时,直挂云帆济沧海!不可再偷懒!💪💪
(嗨,其实也没那么偷懒,地里种的西红柿🍅被照料得可好了,最近长高了不少,回头抛个照片放博客上,也见证我的种菜水平up up up😊😊)