Detaillierte Erläuterung der Python-Dateioperationen

巴扎黑
Freigeben: 2017-09-21 10:52:16
Original
1852 Leute haben es durchsucht

In diesem Artikel werden hauptsächlich detaillierte Erklärungen und Beispiele für Python-Dateioperationen vorgestellt. Ich hoffe, dass jeder, der sich mit dem Wissen über Python-Dateioperationen befasst, darauf zurückgreifen kann >Python-Dateien Detaillierte Erklärungen und Beispiele für Vorgänge

1. Dateioperationsprozess

Öffnen Sie die Datei, holen Sie sich das Dateihandle und weisen Sie es einer Variablen zu

    Bedienen Sie die Datei über das Handle
  • Schließen Sie die Datei
  • Die vorhandenen Dateien lauten wie folgt:


Hinweis: Wenn im Win, wird die Hallo-Datei gespeichert in utf8. Beim Öffnen der Datei wird die vom Betriebssystem geöffnete Datei übergeben, und die Standardcodierung des Win-Betriebssystems ist gbk. Daher führt das direkte Öffnen zu verstümmelten Zeichen. Sie benötigen f=open('hello ', binding='utf8'). Wenn die Hallo-Datei in GBK gespeichert ist, öffnen Sie sie direkt.


2. Dateiöffnungsmodus

昨夜寒蛩不住鸣。
惊回千里梦,已三更。
起来独自绕阶行。
人悄悄,帘外月胧明。
白首为功名,旧山松竹老,阻归程。
欲将心事付瑶琴。
知音少,弦断有谁听。

f = open('小重山') #打开文件
data=f.read()#获取文件内容
f.close() #关闭文件
Nach dem Login kopieren

Zeichenbedeutung

Stellen Sie zunächst die drei grundlegendsten vor Modus:


'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)
Nach dem Login kopieren

3. Dateispezifische Vorgänge


# f = open('小重山2','w') #打开文件
# f = open('小重山2','a') #打开文件
# f.write('莫等闲1\n')
# f.write('白了少年头2\n')
# f.write('空悲切!3')
Nach dem Login kopieren

Weiter Wir erweitern den Dateimodus weiter:


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() #关闭文件
Nach dem Login kopieren

Hinweis 1: Unabhängig davon, ob es sich um py2 oder py3 handelt, kann im r+-Modus eine gleiche Byte-Ersetzung durchgeführt werden, dies ist jedoch nicht der Fall Machen Sie irgendeinen Sinn!


Hinweis 2: Einige Schüler verwenden hier Readlines, um die Inhaltsliste abzurufen, ändern dann den entsprechenden Inhalt über den Index und schreiben die Liste schließlich in die Datei um.

# 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的形式
Nach dem Login kopieren
Bei dieser Idee gibt es ein großes Problem. Wenn die Datenmenge sehr groß ist, kann Ihr Speicher sie nicht ertragen. Unsere Methode kann diesen Prozess jedoch durch Iteratoren optimieren.


Hinzugefügt: rb-Modus und Suche

in py2:


in In py3:


#昨夜寒蛩不住鸣.

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) # 鸣
Nach dem Login kopieren

4. Mit Anweisung


Um zu vermeiden, dass Sie vergessen, die Datei nach dem Öffnen zu schließen kann den Kontext verwalten, Das heißt:
# 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的时候仔显示地去解码.
Nach dem Login kopieren

Auf diese Weise werden die Dateiressourcen automatisch geschlossen und intern freigegeben, wenn der with-Codeblock ausgeführt wird.

Nach Python 2.7 unterstützt es die gleichzeitige Verwaltung des Kontexts mehrerer Dateien, nämlich:

with open('log','r') as f:
    pass
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Python-Dateioperationen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage