Maison >développement back-end >Tutoriel Python >Explication détaillée des opérations sur les fichiers Python
Cet article présente principalement l'explication détaillée et des exemples d'opérations sur les fichiers Python. J'espère que grâce à cet article, tout le monde pourra comprendre et maîtriser les connaissances sur les opérations sur les fichiers Python. Les amis dans le besoin pourront se référer à
Fichiers Python Explications détaillées et exemples d'opérations
1. Opérations sur les fichiers
1. >Ouvrez le fichier, récupérez le handle du fichier et attribuez-le à une variableLes fichiers existants sont les suivants :
昨夜寒蛩不住鸣。 惊回千里梦,已三更。 起来独自绕阶行。 人悄悄,帘外月胧明。 白首为功名,旧山松竹老,阻归程。 欲将心事付瑶琴。 知音少,弦断有谁听。 f = open('小重山') #打开文件 data=f.read()#获取文件内容 f.close() #关闭文件Signification des caractères
Présentez d'abord les trois plus élémentaires. Mode :
'r' open for reading (default) 'w' open for writing, truncating the file first 'x' create a new file and open it for writing 'a' open for writing, appending to the end of the file if it exists 'b' binary mode 't' text mode (default) '+' open a disk file for updating (reading and writing) 'U' universal newline mode (deprecated)
3. Opérations spécifiques au fichier
# f = open('小重山2','w') #打开文件 # f = open('小重山2','a') #打开文件 # f.write('莫等闲1\n') # f.write('白了少年头2\n') # f.write('空悲切!3')
Suivant nous continuons à étendre le mode fichier :
f = open('小重山') #打开文件 # data1=f.read()#获取文件内容 # data2=f.read()#获取文件内容 # # print(data1) # print('...',data2) # data=f.read(5)#获取文件内容 # data=f.readline() # data=f.readline() # print(f.__iter__().__next__()) # for i in range(5): # print(f.readline()) # data=f.readlines() # for line in f.readlines(): # print(line) # 问题来了:打印所有行,另外第3行后面加上:'end 3' # for index,line in enumerate(f.readlines()): # if index==2: # line=''.join([line.strip(),'end 3']) # print(line.strip()) #切记:以后我们一定都用下面这种 # count=0 # for line in f: # if count==3: # line=''.join([line.strip(),'end 3']) # print(line.strip()) # count+=1 # print(f.tell()) # print(f.readline()) # print(f.tell())#tell对于英文字符就是占一个,中文字符占三个,区分与read()的不同. # print(f.read(5))#一个中文占三个字符 # print(f.tell()) # f.seek(0) # print(f.read(6))#read后不管是中文字符还是英文字符,都统一算一个单位,read(6),此刻就读了6个中文字符 #terminal上操作: f = open('小重山2','w') # f.write('hello \n') # f.flush() # f.write('world') # 应用:进度条 # import time,sys # for i in range(30): # sys.stdout.write("*") # # sys.stdout.flush() # time.sleep(0.1) # f = open('小重山2','w') # f.truncate()#全部截断 # f.truncate(5)#全部截断 # print(f.isatty()) # print(f.seekable()) # print(f.readable()) f.close() #关闭文件Remarque 1 : Qu'il s'agisse de py2 ou de py3, le remplacement d'octets égaux peut être effectué en mode r+, mais ce n'est pas le cas donner un sens à!
# f = open('小重山2','w') #打开文件 # f = open('小重山2','a') #打开文件 # f.write('莫等闲1\n') # f.write('白了少年头2\n') # f.write('空悲切!3') # f.close() #r+,w+模式 # f = open('小重山2','r+') #以读写模式打开文件 # print(f.read(5))#可读 # f.write('hello') # print('------') # print(f.read()) # f = open('小重山2','w+') #以写读模式打开文件 # print(f.read(5))#什么都没有,因为先格式化了文本 # f.write('hello alex') # print(f.read())#还是read不到 # f.seek(0) # print(f.read()) #w+与a+的区别在于是否在开始覆盖整个文件 # ok,重点来了,我要给文本第三行后面加一行内容:'hello 岳飞!' # 有同学说,前面不是做过修改了吗? 大哥,刚才是修改内容后print,现在是对文件进行修改!!! # f = open('小重山2','r+') #以写读模式打开文件 # f.readline() # f.readline() # f.readline() # print(f.tell()) # f.write('hello 岳飞') # f.close() # 和想的不一样,不管事!那涉及到文件修改怎么办呢? # f_read = open('小重山','r') #以写读模式打开文件 # f_write = open('小重山_back','w') #以写读模式打开文件 # count=0 # for line in f_read: # if count==3: # f_write.write('hello,岳飞\n') # # else: # f_write.write(line) # another way: # if count==3: # # line='hello,岳飞2\n' # f_write.write(line) # count+=1 # #二进制模式 # f = open('小重山2','wb') #以二进制的形式读文件 # # f = open('小重山2','wb') #以二进制的形式写文件 # f.write('hello alvin!'.encode())#b'hello alvin!'就是一个二进制格式的数据,只是为了观看,没有显示成010101的形式
Il y a un gros problème avec cette idée. Si les données sont très volumineuses, votre mémoire ne pourra pas les supporter. Cependant, notre méthode peut optimiser ce processus grâce aux itérateurs.
Ajouté : mode rb et recherche
dans py2 :
#昨夜寒蛩不住鸣. f = open('test','r',) #以写读模式打开文件 f.read(3) # f.seek(3) # print f.read(3) # 夜 # f.seek(3,1) # print f.read(3) # 寒 # f.seek(-4,2) # print f.read(3) # 鸣
4. Avec la déclaration
# test: 昨夜寒蛩不住鸣. f = open('test','rb',) #以写读模式打开文件 f.read(3) # f.seek(3) # print(f.read(3)) # b'\xe5\xa4\x9c' # f.seek(3,1) # print(f.read(3)) # b'\xe5\xaf\x92' # f.seek(-4,2) # print(f.read(3)) # b'\xe9\xb8\xa3' #总结: 在py3中,如果你想要字符数据,即用于观看的,则用r模式,这样我f.read到的数据是一个经过decode的 # unicode数据; 但是如果这个数据我并不需要看,而只是用于传输,比如文件上传,那么我并不需要decode # 直接传送bytes就好了,所以这个时候用rb模式. # 在py3中,有一条严格的线区分着bytes和unicode,比如seek的用法,在py2和py3里都是一个个字节的seek, # 但在py3里你就必须声明好了f的类型是rb,不允许再模糊. #建议: 以后再读写文件的时候直接用rb模式,需要decode的时候仔显示地去解码.Afin d'éviter d'oublier de fermer le fichier après l'avoir ouvert, vous peut gérer le contexte, c'est-à-dire :
De cette façon, lorsque le bloc de code with est exécuté, les ressources du fichier seront automatiquement fermées et libérées en interne.
Après Python 2.7, avec des supports gérant le contexte de plusieurs fichiers en même temps, à savoir :
with open('log','r') as f: pass
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!