Split-String nach Anzahl der Zeichen

Ich kann nicht herausfinden, wie dies mit String-Methoden zu tun:

In meiner Datei habe ich so etwas wie 1.012345e0070.123414e-004-0.1234567891.21423 … was bedeutet, dass es kein Trennzeichen zwischen den Zahlen gibt.

  • Glpk.LPX Rückwärtskompatibilität?
  • Spalten von Strings mit re.split
  • Schwierigkeiten mit TensorFlow in Jupyter Notebook
  • Django Formset - leere Kwargs
  • Wie man Titelleiste und Fenster anpasst
  • Node.js socket.io-client + python socketio
  • Nun, wenn ich eine Zeile aus dieser Datei lese, bekomme ich einen String wie oben, den ich nach zB 12 Zeichen teilen möchte. Es gibt keine Möglichkeit, dies mit so etwas wie str.split() oder einer anderen String-Methode so weit wie ich gesehen habe, aber vielleicht bin ich mit etwas übersehen?

    Danke

  • Python - beschleunigen Importe?
  • Mit glGetFloatv die Modelview-Matrix im Pyglet abrufen
  • Wie kann ich 1 Million Zahlen sortieren und nur die Top 10 in Python drucken?
  • Konvertieren von Python-Liste von Strings zu ihrem Typ
  • Warum ist das Plotten mit Matplotlib so langsam?
  • Wie python Einzug zu beheben
  • 8 Solutions collect form web for “Split-String nach Anzahl der Zeichen”

    Da Sie in einer ungewöhnlichen Weise iterieren wollen, ist ein Generator ein guter Weg, um das zu abstrahieren:

     def chunks(s, n): """Produce `n`-character chunks from `s`.""" for start in range(0, len(s), n): yield s[start:start+n] nums = "1.012345e0070.123414e-004-0.1234567891.21423" for chunk in chunks(nums, 12): print chunk 

    Produziert:

     1.012345e007 0.123414e-00 4-0.12345678 91.21423 

    (Was nicht richtig aussieht, aber das sind die 12-char-Chunks)

    Du suchst nach String-Slicing.

     >>> x = "1.012345e0070.123414e-004-0.1234567891.21423" >>> x[2:10] '012345e0' 
     line = "1.012345e0070.123414e-004-0.1234567891.21423" firstNumber = line[:12] restOfLine = line[12:] print firstNumber print restOfLine 

    Ausgang :

     1.012345e007 0.123414e-004-0.1234567891.21423 
     from itertools import izip_longest def grouper(n, iterable, padvalue=None): return izip_longest(*[iter(iterable)]*n, fillvalue=padvalue) 

    Versuchen Sie diese Funktion:

     x = "1.012345e0070.123414e-004-0.1234567891.21423" while len(x)>0: v = x[:12] print v x = x[12:] 

    Du kannst es so machen:

     step = 12 for i in range(0, len(string), 12): slice = string[i:step] step += 12 

    Auf diese Weise bekommst du auf jeder Iteration eine Scheibe von 14 Zeichen.

    Ich stolperte auf diese bei der Suche nach einer Lösung für ein ähnliches Problem – aber in meinem Fall wollte ich String in Stücke unterschiedlicher Länge aufteilen. Irgendwann habe ich es mit RE gelöst

     In [13]: import re In [14]: random_val = '07eb8010e539e2621cb100e4f33a2ff9' In [15]: dashmap=(8, 4, 4, 4, 12) In [16]: re.findall(''.join('(\S{{{}}})'.format(l) for l in dashmap), random_val) Out[16]: [('07eb8010', 'e539', 'e262', '1cb1', '00e4f33a2ff9')] 

    Bonus

    Für diejenigen, die es interessant finden können – habe ich versucht, Pseudozufalls-ID durch spezifische Regeln zu erstellen, also ist dieser Code tatsächlich Teil der folgenden Funktion

     import re, time, random def random_id_from_time_hash(dashmap=(8, 4, 4, 4, 12)): random_val = '' while len(random_val) < sum(dashmap): random_val += '{:016x}'.format(hash(time.time() * random.randint(1, 1000))) return '-'.join(re.findall(''.join('(\S{{{}}})'.format(l) for l in dashmap), random_val)[0]) 

    Ich dachte immer, da String-Addition durch eine einfache Logik möglich ist, kann die Teilung so sein. Wenn sie durch eine Zahl geteilt wird, sollte sie sich um diese Länge teilen. So ist das, was du suchst.

     class MyString: def __init__(self, string): self.string = string def __div__(self, div): l = [] for i in range(0, len(self.string), div): l.append(self.string[i:i+div]) return l >>> m = MyString(s) >>> m/3 ['abc', 'bdb', 'fbf', 'bfb'] >>> m = MyString('abcd') >>> m/3 ['abc', 'd'] 
    Python ist die beste Programmiersprache der Welt.