![](http://dingyue.ws.126.net/2023/0127/c16e6c0fj00rp53dn00z7d000v900hkp.jpg)
本月21号的一篇文章(54课),尝试着编写了一个简单的学生通讯录,学生的信息是以列表的数据类型,单个元素以字典为存储形式。这几天学了文件的读写,尝试着把内容保存为文件。
![](http://dingyue.ws.126.net/2023/0127/fe4bd1baj00rp4zzl000sd000ie0059p.jpg)
假设学生通讯录已经被输入进来,总共五个学生的信息,每个信息包含姓名,年龄和电话三个内容。
永不重复的文件名
![](http://dingyue.ws.126.net/2023/0127/0f8a40f2j00rp50zp0020d000n0009vp.jpg)
为了方便后续的操作,我们借助时间函数生成一个带有时间的文件名。
这个文件名包括三个部分,前缀,时间,后缀。
文件的前缀表示是个备份文件,后缀也是备份文件的常用后缀,当然,你也可以起个别的名字,只要你自己别忘记就好。
时间由时间函数生成,格式化当地时间,输出为字符串,以年年月月日日,也就是YYMMDD或yymmdd形式,今天的话就是230127。
转换格式
![](http://dingyue.ws.126.net/2023/0127/4c37f79fj00rp51m6000ad000680057p.jpg)
写入时,是以字符串的形式,所以要把存储的内容转换为字符串类型。先建立一个空的列表,然后把每个元素(字典)依次转换为字符串类型。
![](http://dingyue.ws.126.net/2023/0127/16334432p00rp51m60015d000v9003ep.png)
因为字典里已经使用了单引号,所以外括的,是双引号。反过来,如果里面用了双引号,外面要用单引号,要不然Python会找不到成双配对的相同的引号,发不干活的。
太长了,没法显示全。
写入文件
![](http://dingyue.ws.126.net/2023/0127/ff0aa2f9j00rp51xm001qd000h9009gp.jpg)
我们用for循环把列表中的每个元素(字符串),写入到文件里,并保存(关闭)。
![](http://dingyue.ws.126.net/2023/0127/2e265b6ej00rp525l0039d000sb00ffp.jpg)
直接双击生成的文件,因为bak文件PyCharm没有对应可以打开的应用,所以需要你指定下,告诉它这是text文本文件即可。
中文乱码
![](http://dingyue.ws.126.net/2023/0127/cd1b24a2j00rp525k000dd000iz005cp.jpg)
打开后,发现全是乱码。
![](http://dingyue.ws.126.net/2023/0127/d0236d21j00rp525l0022d000kw009cp.jpg)
我们在创建文件时,没有写明中文的编码造成的。
![](http://dingyue.ws.126.net/2023/0127/37e7b256p00rp525k0006d000e9003dp.png)
写了之后,就会发现能够正常显示了。可是,我们输入的内容呢?
正常写入
![](http://dingyue.ws.126.net/2023/0127/a6f33d92j00rp52uq001wd000k0009sp.jpg)
我们之前错用了转换前的原始列表students,没有用转换后的字符串列表content,换过之后就好了。
![](http://dingyue.ws.126.net/2023/0127/86575ebap00rp52uq000gd000v1003up.png)
打开刚才保存的文件,发现显示了一整行,还没有到头,查看起来很是不便。
换行美化
![](http://dingyue.ws.126.net/2023/0127/300dbec9j00rp535t002md000jd00bnp.jpg)
为了让每个单独的列表元素单独一行,需要在每个转后的字符串的后面加上换行符‘\n’。
![](http://dingyue.ws.126.net/2023/0127/b700dc80j00rp535t000vd000ef006fp.jpg)
这样看起来,是不是好受了许多。
PS:本文代码基于Windows 10,Python 3.10.4。
![](http://dingyue.ws.126.net/2023/0127/cf7f13bcj00rp4v9k0042d000zk00b8p.jpg)
热门跟贴