2017-05-22 3 views
0

Ich bin neu in Python und ich habe ein bisschen Probleme beim Erstellen eines Skripts. Ich habe eine Textdatei wie folgt aus (vereinfacht):Extrahieren Sie bestimmte Textzeilen und ersetzen Sie Wörter oder Zeichen durch Python

Not of interest 
Not of interest  
-object[bla bla  
-bla bla  
-bla bla  
Not of interest  
Not of interest 

1) Ich mag würde, alle Zeilen extrahieren, die „-“. Ich habe es mit

import sys 
Input=open(sys.argv[1],'r') 
Lines=open('Line', 'w') 
with Input as file: 
    for line in Input: 
     if '-' in line: 
      Lines.write(line) 
Input.close() 
Lines.close() 

Erhalten dieser

-object[bla bla 
-bla bla 
-bla bla 

2) In allen Linien extrahiert, ersetzen Sie "[" mit "\ n-". Ich habe es mit

import sys, re 
Input=open(sys.argv[1],'r') 
with Input as file: 
    Output = Input.read() 
    Output = Output.replace('[', '\n-')  
with open('Output', 'w') as file:  
    file.write(Output) 

Erhalten dieser

-object 
-bla bla 
-bla bla 
-bla bla 

3) Wie kann ich alle Passagen dieser beiden Skripte zu einer Einheit verschmelzen?

Sie im Voraus für Ihre Hilfe in dieser Angelegenheit deinnkening

+1

'if - in line 'das ist nicht gültig Python-Syntax. Bitte lesen Sie [ask] –

+0

'if '-' in line:' ist gültig. –

Antwort

0
with open("input.txt", "r") as inputFile, open("output.txt", "w") as outputFile: 
    for line in inputFile: 
    if "-" in line: 
     outputFile.write(line.replace('[', "\n-")) 

Um dies zu testen, ich hatte Ihre Eingabedateien zu ändern, ein wenig interessanter zu sein:

input.txt

Not of interest 
-object[bla bla 
-no square brackets here 
there's one [ here- 
Not of interest 
-and a trailing one here[ 
-there's-[-two-[-here- 
hats[[[! 
-I think the [expected input is [more like this 

Die Ausgabe sieht so aus:

output.txt

-object 
-bla bla 
-no square brackets here there's one 
- here- 
-and a trailing one here 
- 
-there's- 
--two- 
--here- 
-I think the 
-expected input is 
-more like this 

Es ist ziemlich einfach, aber sie es brechen:

with open("input.txt", "r") as inputFile, open("output.txt", "w") as outputFile:

Dies öffnet eine Datei im Lesemodus für die Eingabe, und andere in (Abschneiden und) Schreibmodus für die Ausgabe. Es ist in einem with Block, weil Sie eigentlich immer öffnen mit with verwenden sollten. Sie könnten möglicherweise Fehler erhalten, wenn Sie mit Dateien, Eingabe oder Ausgabe arbeiten, und das with behandelt das elegant.

for line in inputFile:

die Eingabedatei als Iterator, Zeile für Zeile durch die es betreten. Ich habe diesen Dateistream nicht input genannt, weil das bereits der Name des eingebauten Python-Schlüsselworts input() ist. Ich möchte mich nicht verwirren.

if "-" in line:

Überprüfen Sie die Linie zu sehen, ob es sich um eine enthält „-“ und gehen Sie weiter, wenn es funktioniert. Wenn nicht, tun Sie nichts und gehen Sie weiter zur nächsten Zeile.

outputFile.write(line.replace('[', "\n-"))

write() direkt in die Datei unter Umgehung print() Schnittstelle des Python. Wir schreiben die gleiche Zeile mit einem "-" in der vorherigen Codezeile, aber bevor wir sie schreiben, ersetzen wir alle '[' s mit "\ n-" s.

Wie Sie sehen können, ist dies ein ziemlich einfaches, wenn Sie die Logik und den Programmablauf verstehen können. Nur 4 Zeilen.

+0

Vielen Dank! Du hast mir wirklich sehr geholfen! – Gabriele

0

Dies ist ein Weg Sie es gehen könnte:

f = open("target.txt","r+") 
d = f.readlines() 
f.seek(0) 
for i in d: 
    if i != "line you want to remove...": 
     f.write(i) 
f.truncate() 
f.close() 

durch das Lesen durch die Leitung Sie die Zeile angeben könnte

Sie entfernen müssen diese ein wenig bearbeiten Sie Ihre spezifischen Bedürfnisse anzupassen aber melde mich, wenn du Fragen hast. Hoffe das half!

+0

Sie möchte nicht alle Instanzen einer bestimmten Zeile entfernen, sie möchte alle Zeilen ignorieren, die keinen Bindestrich enthalten. –

+0

Danke für Ihre Antwort! – Gabriele

Verwandte Themen