2017-02-13 12 views
0

ich eine Zeichenfolge haben, die aus einer Textdatei importiert wird, mit der folgendenRaum und neue Zeile nach jedem n-ten Zeichen

code: input_file.open("text_file.txt", 'r') 
text = input_file.read() 
input_file.close() 

Nun mein Problem ist, dass die Zeichenfolge zwischen 1 sein wird -999 lang. Ich muss nach jedem zehnten Buchstaben einen Platz haben und nach jedem 60. einen neuen.

Im Moment habe ich versucht mit:

def insertNewLines(text, lineLength): 
    if len(text) <= lineLength: 
    return text 
    else: 
    return text[:60] + ' '.join(text[i:i+10] for i in range(0,len(text),10)) + insertNewLines(text[60:],60) 

Was ich will ist eine Folge von Buchstaben tun importieren (1-999) aus einer Textdatei, dann Python verwenden, um die Sequenz in eine importieren HTML-Datei, die dann eine HTML-Datei mit der importierten Sequenz colorcodiert/nummeriert/geteilt und in einem sichtbaren Format schreibt. Ich habe bereits die HTML-Datei funktioniert, aber ich kann nicht den Text ein Leerzeichen nach 10 Buchstaben und eine neue Zeile nach jeder 60.

Das ist, was mein aktueller Versuch like aussieht.

+0

... und was falsch ist mit dem, was Sie versuchen, ? – asongtoruin

+0

Was ich versuche gibt eine Zeile ohne Leerzeichen/Zeilenumbrüche, dann nach 60lettern, tut es richtig. Wenn es einen Unterschied macht, sollte zwischen jeder neuen Zeile eine Nummerierung der Buchstaben stehen, z. 1 -10spaces-10 -10spaces -20 etc. bis zu 60. –

Antwort

1

du range mit join und Schreiten durch jeden nth Charakter erreichen kann durch die Verwendung. Sobald Ihr Text so aufgeteilt ist, wie Sie ihn haben möchten, können Sie ihn auf \n teilen und dann die p Elemente zwischen jede Zeile einfügen.

f = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' * 35 #this generates a 910 character string 

def break_apart(sep, step): 
    return sep.join(f[n:n + step] for n in range(0, len(f), step)) 


f = break_apart(' ', 10) 
f = break_apart('\n', 60)  

p = '<p>1 10 20 30 40 50 60</p>' 
fp = '\n'.join(j for i in f.split('\n') for j in [p, i]) 

html = '<div>{}</div>'.format(fp) 

print(html) 

<div> 
<p>1 10 20 30 40 50 60<p> 
ABCDEFGHIJ KLMNOPQRST UVWXYZABCD EFGHIJKLMN OPQRSTUVWX YZABC 
<p>1 10 20 30 40 50 60<p> 
DEFGH IJKLMNOPQR STUVWXYZAB CDEFGHIJKL MNOPQRSTUV WXYZABCDEF 
<p>1 10 20 30 40 50 60<p> 
GHIJKLMNOP QRSTUVWXYZ ABCDEFGHIJ KLMNOPQRST UVWXYZABCD EFGH 
<p>1 10 20 30 40 50 60<p> 
IJKLMN OPQRSTUVWX YZABCDEFGH IJKLMNOPQR STUVWXYZAB CDEFGHIJK 
<p>1 10 20 30 40 50 60<p> 
L MNOPQRSTUV WXYZABCDEF GHIJKLMNOP QRSTUVWXYZ ABCDEFGHIJ KLM 
<p>1 10 20 30 40 50 60<p> 
NOPQRST UVWXYZABCD EFGHIJKLMN OPQRSTUVWX YZABCDEFGH IJKLMNOP 
<p>1 10 20 30 40 50 60<p> 
QR STUVWXYZAB CDEFGHIJKL MNOPQRSTUV WXYZABCDEF GHIJKLMNOP QR 
<p>1 10 20 30 40 50 60<p> 
STUVWXYZ ABCDEFGHIJ KLMNOPQRST UVWXYZABCD EFGHIJKLMN OPQRSTU 
<p>1 10 20 30 40 50 60<p> 
VWX YZABCDEFGH IJKLMNOPQR STUVWXYZAB CDEFGHIJKL MNOPQRSTUV W 
<p>1 10 20 30 40 50 60<p> 
XYZABCDEF GHIJKLMNOP QRSTUVWXYZ ABCDEFGHIJ KLMNOPQRST UVWXYZ 
<p>1 10 20 30 40 50 60<p> 
ABCD EFGHIJKLMN OPQRSTUVWX YZABCDEFGH IJKLMNOPQR STUVWXYZAB 
<p>1 10 20 30 40 50 60<p> 
CDEFGHIJKL MNOPQRSTUV WXYZABCDEF GHIJKLMNOP QRSTUVWXYZ ABCDE 
<p>1 10 20 30 40 50 60<p> 
FGHIJ KLMNOPQRST UVWXYZABCD EFGHIJKLMN OPQRSTUVWX YZABCDEFGH 
<p>1 10 20 30 40 50 60<p> 
IJKLMNOPQR STUVWXYZAB CDEFGHIJKL MNOPQRSTUV WXYZABCDEF GHIJ 
<p>1 10 20 30 40 50 60<p> 
KLMNOP QRSTUVWXYZ ABCDEFGHIJ KLMNOPQRST UVWXYZABCD EFGHIJKLM 
<p>1 10 20 30 40 50 60<p> 
N OPQRSTUVWX YZABCDEFGH IJKLMNOPQR STUVWXYZAB CDEFGHIJKL MNO 
<p>1 10 20 30 40 50 60<p> 
PQRSTUV WXYZABCDEF GHIJKLMNOP QRSTUVWXYZ 
</div> 
+0

Hallo, das ist genau das, was ich will, es scheint aber nicht zu funktionieren. Wenn es einen Unterschied macht, wird meine Eingabe aus einer txt.file in einer langen Sequenz importiert. Es sollte dann in HTML kopiert werden, damit ich es "nett" aussehen lassen kann. Wäre es hilfreich, wenn ich den gesamten Code posten würde, den ich gerade verwende? –

+0

@ JacobSørensen Kopieren in HTML * macht * einen Unterschied; Es ändert das erwartete Verhalten der ursprünglichen Frage. – Wondercricket

+0

Wie kann ich den Rest meines Codes anzeigen?Eine grundlegende Erklärung wäre, dass ich eine Folge von Buchstaben (1-999) aus einer Textdatei importiere und dann mit python die Sequenz in eine HTML-Datei importiere, die dann einen HTML-Code mit der importierten Sequenz colorcodiert/nummeriert/geteilt schreibt und in einem sichtbaren Format. Danke –

0

Ich nehme an, Ihre 'text_file' hat Zeilenumbrüche in Zeile für Zeile.

text = [] 
    # My Sample Text files are utf-8 encoded 
    with io.open('text_file.txt','r', encoding='utf8') as fh: 
    for row,line in enumerate(fh,1): 
     text.append(line) 
    #end for 
    #end with = closing fh 

mit Python getestet: 3.4.2

+0

Hallo, meine Textdatei sollte keine Leerzeichen oder neue Zeilen haben, es sollte 1 lange Folge von Buchstaben sein. –

+0

Meinst du einen HTML-Zeilenumbruch statt einfach \ n? – stovfl

+0

Um ehrlich zu sein bin ich mir nicht 100% ig sicher, ich brauche die Zeilenumbrüche für eine importierte Zeichenkette, aber die Zeichenkette soll zum Formatieren in eine HTML-Datei importiert werden. –

0

eine konsistente Textzeichenfolge als Eingabe Angenommen:

import string 
import random 


text = '' 
for i in range(16): 
    text += random.choice(string.ascii_lowercase)*10 

def insert_new_lines(input_string): 
    output = [] 
    for i in range(0, len(text), 60): 
     output.append(' '.join([text[j:j+10] for j in range(i, i+60, 10)])) 
    return '\n'.join(output) 


print insert_new_lines(text) 

zurückgibt, mit zufälligen Buchstaben als Beispiel:

ssssssssss mmmmmmmmmm mmmmmmmmmm wwwwwwwwww zzzzzzzzzz aaaaaaaaaa 
llllllllll llllllllll ffffffffff rrrrrrrrrr cccccccccc nnnnnnnnnn 
rrrrrrrrrr xxxxxxxxxx uuuuuuuuuu qqqqqqqqqq 
Verwandte Themen