Wie bekommt man veränderbare String?

Ich generiere Sql-Abfrage und perfoming eine Menge von + = Operationen auf meinem String. Es sieht aus wie:

insert_string = 'INSERT INTO ' + table_name + ' VALUES ' for row in data_frame.iterrows(): raw_row = row[1].values insert_string += str(tuple(raw_row)) 

Also, wenn mein insert_string ist unveränderlich alle + = Operation erstellt neue Zeichenfolge. Zum Beispiel, in C # gibt es StringBuilder-Klasse für diese, die den leeren String mit gegebener Kapazität initialisieren könnte. Wie kann ich das in Python machen?

4 Solutions collect form web for “Wie bekommt man veränderbare String?”

Vielleicht ist der häufigste Weg, um eine Liste aller Stücke zu erstellen und sie mit der str.join Methode zu verbinden, wie str.join :

 pieces = ['a', 'b', 'c'] text = ''.join(pieces) assert text == 'abc' 

Beachten Sie, dass Sie die join Methode auf dem Trennzeichen aufrufen, die zwischen den Stücken kommen wird. Im vorherigen Beispiel war das der leere String, aber in deinem Fall möchtest du eigentlich etwas wie einen Raum oder gar ein Zeilenumbruch haben:

 pieces = ['a', 'b', 'c'] text = '\n'.join(pieces) 

Darüber hinaus können Sie eine Datei-ähnliche Schnittstelle mit der io.StringIO Klasse:

 with io.StringIO() as query_str: query_str.write('INSERT INTO ') query_str.write(table_name) query_str.write(' VALUES ') for row in data_frame.iterrows(): raw_row = row[1].values query_str.write(str(tuple(raw_row))) # Use query_str.getvalue(), as it will be deleted # when the 'with' scope is finished. 

In Python 2 gibt es ein Modul namens UserString , das MutableString enthält.

 from UserString import * myString = MutableString('String') myString.pop(0) myString[1] = 'h' print myString # prints 'thing' 

Hier ist ein guter Artikel über Efficient String Verkettung in Python, die sehr passt zu Ihrem Problem.

Tl; dr: Verwenden Sie join mit einem Listenverständnis:

 ''.join([str(tuple(row[1].values)) for row in data_frame.iterrows()]) 

Was Sie wahrscheinlich suchen, ist StringIO , die eine Datei-ähnliche Schnittstelle zu einer Liste von Strings präsentiert und ermöglicht es Ihnen, einen einzelnen String am Ende zu extrahieren:

 import StringIO builder = StringIO.StringIO() builder.write('INSERT INTO ') builder.write(table_name) builder.write(' VALUES ') for row in data_frame.iterrows(): raw_row = row[1].values builder.write(str(tuple(raw_row))) insert_string = builder.getvalue() 

Obwohl die meisten Python-Benutzer sind glücklich mit der Verwendung einer Liste direkt, wie in Rafael Antwort . Für die Vollständigkeit hier ist dein Code in diesen Stil übersetzt:

 builder = ['INSERT INTO ', table_name, ' VALUES '] for row in data_frame.iterrows(): raw_row = row[1].values builder.append(str(tuple(raw_row))) insert_string = ''.join(builder) 

Im seltsamen Fall, dass jemand, der diese Frage betrachtet, tatsächlich eine veränderliche Zeichenkette benötigt, Es tut mir leid zu sagen, dass es nichts ganz so ist, und die Lösung hängt ein bisschen auf das genaue Problem, das Sie versuchen zu lösen. Wenn Sie eine veränderliche Byte- String benötigen, ist das verfügbar, builtin, als bytearray .

 >>> b bytearray(b'xaby') >>> b[1:3] = b'yz' >>> b bytearray(b'xyzy') >>> b.extend(b'foonly') >>> b bytearray(b'xyzyfoonly') 

Es gibt keine gleichwertige Aktion für str .

  • Ctypes - Anfänger
  • Grundlegende Python-Importe Frage
  • Matplotlib Pfad linewidth verbunden mit Abbildung zoom
  • Anfängerpythonschlaufe
  • Pyinstaller enthält automatisch nicht benötigte Module
  • Wie schreibe ich an CSV und überschreibe nicht über Text
  • Python-Version falsch identifiziert
  • Wie lassen Sie andere Python-Programm ohne Python installieren
  • Python 3.3: Ausgabe der Anagram-Funktion
  • PyQt: Verknüpfung von Schaltflächen zu Funktionen in meinem Programm
  • Python NameError: name ist nicht definiert
  • Python ist die beste Programmiersprache der Welt.