在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‘ >
怎么把字典存到文件里面,通过字符串的形式把字典存进文件(将字典转换成字符串),然后再把字符串转换成字典读出来(再将字符串转换成字典)