文件读写 1、先打开文件 2、读取/写入内容 3、保存文件 文件的open模式有三种 1、w 写模式,它是不能读的 只要用w打开文件,文件中的东西都会被清空 w+, 写读模式,只要沾上w 就会清空原来的文件 2、r 读模式,只能读,不能写,而且文件必须存在 r+ 读写模式,只要沾上r 文件必须存在 不存在就会报错 3、a 追加模式,也能写 这种模式,打开文件后直接定位到文件的末尾,然后开始追加,所以会用到 .seek(0)得方法 a+ rb+ wb+ f=open('a.txt222','a+',encoding='utf-8') f.seek(0) #a+模式,指针定位在末尾,使用.seek(0)可以将指针定位带最前面 print(f.read()) #read:返回的是字符串 读取的是整个文件 效率低 print(f.readlines()) #readlines:返回的是一个列表 通常用来读取配置文件 read和readlines读取的是整个文件 效率低 f.seek(0) print(f.readline()) #readline方法:返回的是字符串 每次只读取一行数据 效率高 如果文件很小,read()一次性读取最方便;如果不能确定文件大小,反复调用read(size)比较保险;如果是配置文件,调用readlines()最方便: f=open(‘a.txt’) 如果在打开文件的时候不指定模式,那就是默认读模式 f=open('a.txt','r',encoding='utf-8') print(f.read()) #直接循环的时候循环的是文件的每一行 比read和readlines的效率高些 count=1 for line in f: print('第%s行:%s'%(count,line)) count+=1 -------------------------------------------------------------- write #写文件的的时候,只能是写字符串 f.writelines(['123','456','789']) #可以吧列表写到里头 list每个元素是文件的每一行 # f.write('jmysdfsdf')#write是写内容,只能写字符串 调用read()会一次性读取文件的全部内容,如果文件有10G,内存就爆了,所以,要保险起见,可以反复调用read(size)方法,每次最多读取size个字节的内容。另外,调用readline()可以每次读取一行内容,调用readlines()一次读取所有内容并按行返回list。因此,要根据需要决定怎么调用 三、用linecache读取文件内容(测试过1G大小的文件,效率还可以) str = linecache.getlines(filename) str为列表形式,每一行为列表中的一个元素 ------------------------------------ 其他操作: f = open('file.txt','r+',encoding='utf-8')#encoding参数可以指定文件的编码 f.readline()#读一行 f.readable()#判断文件是否可读 fr.writable()#判断文件是否可写 fr.encoding#打印文件的编码 f.read()#读取所有内容,大文件时不要用,因为会把文件内容都读到内存中,内存不够的话,会把内存撑爆 f.readlines()#读取所有文件内容,返回一个list,元素是每行的数据,大文件时不要用,因为会把文件内容都读到内存中,内存不够的话,会把内存撑爆 f.tell()#获取当前文件的指针指向 f.seek(0)#把当前文件指针指向哪 f.write('爱情证书')#写入内容 f.fulsh()#写入文件后,立即从内存中把数据写到磁盘中 f.truncate()#清空文件内容 只清空指针之后得文件内容 所以一般需要用到f.seek(0) f.truncate([size]) #把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置 f.writelines(['爱情证书','孙燕姿'])#将一个列表写入文件中 f.close()关闭文件 -------------------------------------------------------------------- 文件操作练习题: 二、文件操作方法大全: 1.os.mknod("test.txt") #创建空文件 2.fp = open("test.txt",w) #直接打开一个文件,如果文件不存在则创建文件 3.关于open 模式: fp.read([size]) #size为读取的长度,以byte为单位 fp.readline([size]) #读一行,如果定义了size,有可能返回的只是一行的一部分 fp.readlines([size]) #把文件每一行作为一个list的一个成员,并返回这个list。其实它的内部是通过循环调用readline()来实现的。如果提供size参数,size是表示读取内容的总长,也就是说可能只读到文件的一部分。 fp.write(str) #把str写到文件中,write()并不会在str后加上一个换行符 fp.writelines(seq) #把seq的内容全部写到文件中(多行一次性写入)。这个函数也只是忠实地写入,不会在每行后面加上任何东西。 fp.close() #关闭文件。python会在一个文件不用后自动关闭文件,不过这一功能没有保证,最好还是养成自己关闭的习惯。 如果一个文件在关闭后还对其进行操作会产生ValueError fp.flush() #把缓冲区的内容写入硬盘 fp.fileno() #返回一个长整型的”文件标签“ fp.isatty() #文件是否是一个终端设备文件(unix系统中的) fp.tell() #返回文件操作标记的当前位置,以文件的开头为原点 fp.next() #返回下一行,并将文件操作标记位移到下一行。把一个file用于for … in file这样的语句时,就是调用next()函数来实现遍历的。 fp.seek(offset[,whence]) #将文件打操作标记移到offset的位置。这个offset一般是相对于文件的开头来计算的,一般为正数。但如果提供了whence参数就不一定了,whence可以为0表示从头开始计算,1表示以当前位置为原点计算。2表示以文件末尾为原点进行计算。需要注意,如果文件以a或a+的模式打开,每次进行写操作时,文件操作标记会自动返回到文件末尾。 fp.truncate([size]) #把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。如果size比文件的大小还要大,依据系统的不同可能是不改变文件,也可能是用0把文件补到相应的大小,也可能是以一些随机的内容加上去。 -------------------------------------------------------------------- # 1.打开一个文件 #2、读取整个文件,返回字符串 #3、读取一行 #4、读取整个文件,返回列表 #5、写入字符串 #6、写入非int类型的列表 # 7.清空文件 # 8.关闭文件 **************************************************************************** 字典: 字典(1、字典是无序的 2、key:value #key不能重复) info={ 'name':'lzc', 'sex':'nan', } (一)查询 print(info) print(info['name']) print(info['addr']) print(info.get('addr','没有取到值')) 1、用中括号和get取值的方法区别,如果get方法取不到key时,不会报错,但是中括号取值不到就会报错 2、get方法还可多传一个参数,如果get不到值key的话,那么返回xx,如果不写默认返回none (二)添加 1、info['addr']='beijing' print(info) 2、info.setdefault('phone',123243444) print(info) (三)修改 info['age']=7 #有这个字段的时候是修改 没有这个字段的的时候是新增 print(info) (四)删除 1、del info['age'] print(info) 2、print(info.pop('name')) #必须要指定key 返回的是删除的字段的值 3、info.clear() 清空字典 4、info.popitem() 随机删除一个元素 请务必注意,dict内部存放的顺序和key放入的顺序是没有关系的。 和list比较,dict有以下几个特点:
- 查找和插入的速度极快,不会随着key的增加而变慢;
- 需要占用大量的内存,内存浪费多。
而list相反:
- 查找和插入的时间随着元素的增加而增加;
- 占用空间小,浪费内存很少。
所以,dict是用空间来换取时间的一种方法。 需要牢记的第一条就是dict的key必须是不可变对象 这是因为dict根据key来计算value的存储位置,如果每次计算相同的key得出的结果不同,那dict内部就完全混乱了。这个通过key计算位置的算法称为哈希算法(Hash)。 要保证hash的正确性,作为key的对象就不能变。在Python中,字符串、整数等都是不可变的,因此,可以放心地作为key。而list是可变的,就不能作为key: 字典键的特性 字典值可以没有限制地取任何python对象,既可以是标准的对象,也可以是用户定义的,但键不行 1)不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住 2)键必须不可变,所以可以用数字,字符串或元组充当,所以用列表就不行 ---------------------------------------------------------------- 字典练习: user={'name':'niuhany','age':18} #字典取值的方式1 方式2 # print(user['name']) # print(user.get('name')) # 字典修改值方式1 方式2 # user['name']='lzc' # user.update(name='haha') # print(user) # 给字典增加值的方式1 方式二 # user['addr']='huilongguang' # user.setdefault('sex','nan') # print(user) # 删除值的方式1,方式2 删除随机值 # del user['name'] # user.pop('age') # user.popitem() # print(user) print(user.items()) for k,v in user.items(): #同时循环k和value print("%s=%s"%(k,v)) for k in user: print("%s=%s"%(k,user[k])) # 判断一个字典在不在字典里面 user={'name':'lzc', 'aes':'nan'} if 'name' in user: print(True)
转载于:https://www.cnblogs.com/zunchang/p/7638143.html
原文链接:https://blog.csdn.net/weixin_30342827/article/details/96486494
本站声明:网站内容来源于网络,如有侵权,请联系我们,我们将及时处理。
还没有人抢沙发呢~