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.

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

  • Wie mache ich das für die Schleife in Python Arbeit?
  • Asterisk Kunst in Python
  • Setzen Sie gzipped Daten in ein Skript als String
  • Python - Überprüfen Sie, ob Word in einer Zeichenfolge ist
  • Löschen Sie zusätzlichen Speicherplatz aus den Werten in der Liste
  • Python 3 string.join () Äquivalent?
  • Ich kann nicht scheinen, die richtige Formatierung Spezifikation für vorausgehende Nullen in Python zu finden
  • Suche nach Permutation von Zeichen eines Teilstrings in Python
  • 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.