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' 

  • Python3.6 BeautifulSoup funktioniert nicht
  • Pythonic beautifulSoup4: Wie bekomme ich noch Titeln von der nächsten Seite Link einer Wikipedia-Kategorie
  • Unterschiedliches Ergebnis von modulo und interger division für float und decimal
  • Wie schließe ich einen Code, bis eine bestimmte Nummer erstellt wird?
  • Python 3.5 32-Bit-Fenster-Import-Modul scheitert, aber Pip-Installation funktioniert
  • QPX Express API von Python
  • Falcon, AttributeError: 'API' Objekt hat kein Attribut 'create'
  • Wie suche ich mehrere Zeilen in Python 3?
  • 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.