day3_文件读写

Posted laosun0204

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了day3_文件读写相关的知识,希望对你有一定的参考价值。

python3里面只有这一种打开文件的方法,open(‘a.txt‘),文件叫什么名字都行

文件打开的时候有三种方式(读、写、追加),默认是读的方式打开文件

读,用r表示,以读文件的方式打开的时候,如果文件不存在会报错;如果文件存在,而且不需要往文件里写东西的时候,用r打开,只要沾上r,文件不存在的时候就会报错

 

f = open(‘a.txt‘),如果a.txt不在当前目录下会报错,如果想不报错就创建一个a.txt,如果a.txt文件里有内容就会把内容读出来

f = open(‘a.txt‘,encoding = ‘utf8‘)

print(f.read()) #读取文件所有内容,读到内存中,返回的是一个字符串

print(f.readlines()) #读取文件所有内容,返回的是一个list,list每个元素是文件的每一行

print(f.readline()) #每次只取一行内容,要取多行内容,要多次执行print(f.readline())

写,用w表示,以写文件的方式打开的时候,如果文件不存在,会新建一个文件;如果文件存在会把之前的文件内容清空,然后会读不到内容报错,只要沾上w,就会清空以前的文件内容

f = open(‘a.txt‘,‘w‘,encoding = ‘utf8‘)

print(f.read())

f = open(‘a.txt‘,‘w‘,encoding = ‘utf8‘)

f.write(‘哈哈哈哈‘) #write是写内容,只能写字符串

f.writelines([‘123\n‘,‘345‘])#writelines写入的是一个list

f = open(‘a.txt‘,‘r+‘,encoding = ‘utf8‘) # r+是读写模式

f.write(‘哈哈哈哈‘) #会把之前文件里有的内容覆盖掉

f = open(‘a.txt‘,‘w+‘,encoding = ‘utf8‘) #w+是写读模式

f.write(‘哈哈哈哈‘) #会把之前文件里有的内容覆盖掉

f.seek(0) #移动文件指针

print(f.read())

r+和w+这两种模式都不好,会把之前的内容清空

 

追加,用a表示,a的好处是没有文件会创建文件,也不会清空以前的文件内容,也不报错

f = open(‘b.txt‘,‘a‘,encoding = ‘utf8‘)

f.write(‘哈哈哈哈‘)

f.seek(0) #移动文件指针

print(f.read())

追加(a)模式只能写,不能读,运行的时候会报错

#a+是追加读写模式

f = open(‘b.txt‘,‘a+‘,encoding = ‘utf8‘)

f.write(‘哈哈哈哈‘)

f.seek(0) #移动文件指针

print(f.read())

追加读写(a+)模式既能写,又能读

 

f = open(‘b.txt‘,‘a+‘,encoding = ‘utf8‘)

print(f.read())

执行上面两行会为空显示,因为a+模式是从文件的末尾追加,读的时候会显示空内容,要想读到内容必须加上f.seek(0)才能读出来

 

循环一个文件对象的时候,循环的是文件的每一行

f = open(‘b.txt‘,‘a+‘,encoding = ‘utf8‘)

f.seek(0)
i = 1

for line in f: #文件比较大的话,for循环效率比较高

     print(‘第{hang}行:{line}‘.format(hang = i, line = line))

     i = i + 1

f.close() #手动关闭文件

with open(‘b.txt‘,‘a+‘,encoding = ‘utf8‘) as f: #运行完成后,with可以自动关闭文件

   f.seek(0)

   for line in f:

       print(line)

 

user_info = {

             ‘jmy‘: {‘money‘:100,

                   ‘shengao‘:180,

                   ‘password‘:‘123456‘},

             ‘agr‘: {‘money‘:30,

                   ‘shengao‘: 190,

                   ‘password‘:‘123456‘ }

}

f = open(‘users.txt‘,‘a+‘,encoding = utf8)

f.write(user_info) #第一种情况,运行会报错,因为write写入的是字符串,而现在是字典要写到users.txt里

print(str(user_info)) #第二种情况,强制类型转换成字符串,虽然能读出来但是没写进去

f.seek(0) #第三种情况,把文件指针移到最开始

print(f.read())#第三种情况,没有写进去,什么也读不到

f.write(str(user_info)) #第四种情况,写到文件里了,但是写进去的是一个字符串

f.seek(0) #第五种情况,把文件指针移到最开始

print(f.read())#第五种情况,读出来了

f.seek(0) #第六种情况,把文件指针移到最开始

print(type(f.read()))#第六种情况,查看类型,发现是字符串类型,字符串类型不好取值

f.seek(0) #第七种情况,把文件指针移到最开始

print(dict(f.read())) #第七种情况,转换类型,报错,不能转换

f.seek(0) #第八种情况,把文件指针移到最开始

print(eval(f.read())) #第八种情况,转换类型,字符串转换成字典类型

f.seek(0) #第九种情况,把文件指针移到最开始

new_user_info = eval(f.read()) #第九种情况,转换类型,验证是否已转换成字典类型

print(type(new_user_info)) #第九种情况,转换成功,打印出< class‘dict’>

f.seek(0) #第十种情况,把文件指针移到最开始

new_user_info = eval(f.read()) #第十种情况,在users2.txt里输入一个list

print(type(new_user_info)) #第十种情况,转换成功,打印出< class‘list’>

同理在users2.txt里输入一个tuple/string,会打印出< class‘tuple/‘str‘ >

怎么把字典存到文件里面,通过字符串的形式把字典存进文件(将字典转换成字符串),然后再把字符串转换成字典读出来(再将字符串转换成字典)

以上是关于day3_文件读写的主要内容,如果未能解决你的问题,请参考以下文章

自动化day3---Python基础(list字典元组文件读写字符串格式化)

Day3

golang读写文件的几种方式

python之文件的读写

day3 文件操作

Python学习笔记__9.1章 文件读写