Heim > Artikel > Backend-Entwicklung > So lesen Sie TXT-Text Zeile für Zeile und entfernen Duplikate unter Python3.4.3
Dieser Artikel stellt hauptsächlich die Methode zum zeilenweisen Lesen von TXT-Texten und zum Entfernen von Duplikaten unter Python3.4.3 vor. Jetzt kann ich ihn mit Ihnen teilen
Zu den Problemen, die beim Lesen und Schreiben von Dateien beachtet werden sollten, gehören:
1. Schließen Sie den Dateideskriptor sofort nach Abschluss des Vorgangs
3. Codekompatibilität
Mehrere Methoden:#!/bin/python3 original_list1=[" "] original_list2=[" "] original_list3=[" "] original_list4=[" "] newlist1=[" "] newlist2=[" "] newlist3=[" "] newlist4=[" "] newtxt1="" newtxt2="" newtxt3="" newtxt4="" #first way to readline f = open("duplicate_txt.txt","r+") # 返回一个文件对象 line = f.readline() # 调用文件的 readline()方法 while line: original_list1.append(line) line = f.readline() f.close() #use "set()" remove duplicate str in the list # in this way,list will sort randomly newlist1 = list(set(original_list1)) #newlist1 = {}.fromkeys(original_list1).keys() #faster #rebuild a new txt newtxt1="".join(newlist1) f1 = open("noduplicate1.txt","w") f1.write(newtxt1) f1.close() ################################################################### #second way to readline for line in open("duplicate_txt.txt","r+"): original_list2.append(line) newlist2 = list(set(original_list2)) newlist2.sort(key=original_list2.index) #sort #newlist2 = sorted(set(original_list2),key=l1.index) #other way newtxt2="".join(newlist2) f2 = open("noduplicate2.txt","w") f2.write(newtxt2) f2.close() ################################################################### #third way to readline f3 = open("duplicate_txt.txt","r") original_list3 = f3.readlines() #读取全部内容 ,并以列表方式返回 for i in original_list3: #遍历去重 if not i in newlist3: newlist3.append(i) newtxt3="".join(newlist3) f4 = open("noduplicate3.txt","w") f4.write(newtxt3) f4.close() ################################################################### #fourth way f5 = open('duplicate_txt.txt',"r+") try: original_list4 = f5.readlines() [newlist4.append(i) for i in original_list4 if not i in newlist4] newtxt4="".join(newlist4) f6 = open("noduplicate4.txt","w") f6.write(newtxt4) f6.close() finally: f5.close()Ergebnis:
Vor der Deduplizierung:
Nachher Deduplizierung (nicht in der richtigen Reihenfolge):
Nach der Deduplizierung (in der richtigen Reihenfolge):
ZusammenfassungDas folgende Programm umfasst Dateilese- und Schreibvorgänge sowie verknüpfte Listenvorgänge. Mehrere unter erwähnte Probleme Am Anfang des Artikels ist mir die Codierung egal, da ich kein Chinesisch verwende, aber ich muss es trotzdem hier erwähnen:
f = open("test.txt","w") f.write(u"你好")
Der obige Code meldet einen Fehler, wenn er in Python2 ausgeführt wird.
Der Fehler wird gemeldet, weil das Programm die Unicode-Zeichenfolge nicht direkt speichern kann. Sie muss codiert und in ein Binärbyte konvertiert werden Sequenz vom Typ str, bevor sie gespeichert werden kann.
Die write()-Methode konvertiert die Kodierung automatisch und verwendet standardmäßig das ASCII-Kodierungsformat. ASCII kann Chinesisch nicht verarbeiten, sodass ein UnicodeEncodeError auftritt.
Der richtige Weg besteht darin, das Format vor dem Aufruf der write()-Methode manuell zu konvertieren und zum Konvertieren in str utf-8 oder gbk zu verwenden.
f = open("test.txt","w") text=u"你好" text=text.encode(encoding='utf-8') f.write(text)
Über close(): Welche Auswirkungen hat es, wenn nicht geschlossen wird? ? Nach Abschluss des Vorgangs führt das Nichtschließen der Datei zu einer Verschwendung von Systemressourcen, da die Anzahl der Dateideskriptoren, die vom System geöffnet werden können, begrenzt ist. Linux ist 65535.
Im Allgemeinen ist es nach dem Schließen in Ordnung, es kann jedoch zu besonderen Situationen kommen. Beispielsweise ist beim Aufrufen der Funktion open() ein Fehler aufgetreten und der Aufruf von close() ist definitiv nicht ausreichend einen Fehler melden. Eine andere Methode besteht darin, dass, wenn während write() nicht genügend Speicherplatz vorhanden ist, ein Fehler gemeldet wird und close() keine Chance zur Ausführung hat. Der richtige Weg besteht darin, „try außer“ zu verwenden, um die Ausnahme abzufangen:
f = open("test.txt","w") try: text=u"你好" text=text.encode(encoding='utf-8') f.write(text) except: IOError as e: print("oops,%s"%e.args[0]) finally: f.close()
Eine elegantere Schreibweise ist die Verwendung mit...as.
with open("test.txt","w") as f: text=u"你好" f.write(text.encode(encoding='utf-8'))
Das Dateiobjekt implementiert das Morgen- und Nachmittagsmanagerprotokoll. Wenn das Programm die with-Anweisung eingibt, weist es das Dateiobjekt der Variablen f und zu Es wird automatisch die Methode close() aufgerufen.
Zu Kompatibilitätsproblemen: Die open()-Funktionen von Python2 und Python3 sind unterschiedlich. Letztere können Zeichen in der Funktion angeben Format.
Wie löse ich das Kompatibilitätsproblem open() zwischen Python2 und Python3?
Verwenden Sie die open()-Funktion unter dem io-Modul io.open in Python2 entspricht der open-Funktion von Python3
from io import open with open("test.txt","w",encoding='utf-8') as f: f.write(u"你好")
Verwandt Empfehlungen:
Das obige ist der detaillierte Inhalt vonSo lesen Sie TXT-Text Zeile für Zeile und entfernen Duplikate unter Python3.4.3. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!