Wie decodiere ich Binärdatei mit "für Index, Zeile in Enumerate (Datei)"?

Ich file1.py eine extrem große Binärdatei, die ich in Python 3.5 in file1.py :

 with open(pathname, 'rb') as file: for i, line in enumerate(file): # parsing here 

Allerdings bekomme ich natürlich einen Fehler, weil ich die Datei im Binärmodus lese und dann eine Liste von Bytes schaffe. Dann mit einer for-Schleife, verglichen Sie String zu Bytes und hier der Code fehlschlägt.

Wenn ich in einzelnen Zeilen lese, würde ich das tun:

 with open(fname, 'rb') as f: lines = [x.decode('utf8').strip() for x in f.readlines()] 

Allerdings benutze ich for index, lines in enumerate(file): Was ist der richtige Ansatz in diesem Fall? Schreibe ich die nächsten Objekte?

Hier ist der eigentliche Code, den ich laufe:

 with open(bam_path, 'rb') as file: for i, line in enumerate(file): line_data=pd.DataFrame({k.strip():v.strip() for k,_,v in (e.partition(':') for e in line.split('\t'))}, index=[i]) 

Und hier ist der Fehler:

 Traceback (most recent call last): File "file1.py", line 18, in <module> for e in line.split('\t'))}, index=[i]) TypeError: a bytes-like object is required, not 'str' 

  • List Verständnis Verhalten in Python
  • Was bedeutet aufzählen?
  • (Python) Zählen von Zeilen in einer riesigen (> 10GB) Datei so schnell wie möglich [duplizieren]
  • Python dict-Funktion beim Aufzählen von Objekt
  • Pylint: Mit undefined loop Variable 'n'
  • Iterate über Spalten in einer Liste von Listen in Python
  • One Solution collect form web for “Wie decodiere ich Binärdatei mit "für Index, Zeile in Enumerate (Datei)"?”

    Sie könnten einen Generator mit den dekodierten Zeilen enumerate :

     for i, line in enumerate(l.decode(errors='ignore') for l in f): 

    Das macht den Trick, jede Zeile in f nach der Entschlüsselung zu geben. Ich habe errors='ignore' hinzugefügt errors='ignore' aufgrund der Tatsache, dass die Eröffnung mit r mit einem unbekannten r fehlgeschlagen ist.

    Abgesehen davon können Sie alle String-Literale mit Byte-Literalen ersetzen, wenn Sie auf bytes , dh: partition(b':') , split(b'\t') und machen Sie Ihre Arbeit mit bytes (ziemlich sicher Pandas funktioniert gut mit Sie).

    Python ist die beste Programmiersprache der Welt.