2016-06-11 14 views
1

Ich musste unlängst meine Datenbank auf meiner Website im Notfall kopieren.Dateien mit mehreren Duplikaten bereinigen

Ich kratzte es mit einigen Funktionen, die ich in Python mit meinen Admin-Codes gemacht habe. Die Datenbank wird formated wie:

Name: 
Phone Number: 
Has played the game: 

Alles in .txt Datei kopiert wurde, aber manchmal finde ich einige Fehler in der Datei wie:

Name: Name: Name: Bob 

Wie kann ich diese Sauerei mit Shell-Befehl oder Python aber die gleiche Reihenfolge beibehalten (ich will, dass es immer noch Name, Telefonnummer usw. ist)?

+0

zeigen eine größere Probe Ihrer txt-Datei ein kleines Skript versuchen. Ist das einzige Problem, dass manchmal Name: wiederholt wird? Zeigen Sie jede Art von Anomalie –

+0

Das einzige Problem ist, dass manchmal, Name, Telefonnummer von hat das Spiel mehrmals in meiner Datei in der gleichen Zeile wiederholt werden – rak007

+0

Abgesehen von Python.was Shell verwenden Sie Linux? .. – repzero

Antwort

1

Sagen Sie bitte diese

Phone Number: 
Phone Number: Phone Number: Phone Number: 0118521358 Name: Name: Name: Name: Bob 
Has played the game: 
Name: Name: Name: Name: Bob 

in db.txt haben Sie können wie diese

import re 
#create a new file called new_file 
new_file=open("new_file",'w') 
#open the database file with the discrepancies 
file_with_error=open('db.txt','r') 
#make a list of all your columns in the db 
db_header=['Name:','Phone Number:'] 
#iterate through each line in your database file and find matches to replace 
for line in file_with_error: 
    for col_name in db_header: 
     line=re.sub("(%s[ ]*)+" %(col_name,),col_name,line) 
    new_file.write(line) #write your new line your file 
new_file.close() 
exit(0) 
0

Sie können reguläre Ausdrücke verwenden, um Zeichenfolgenabgleich und Ersetzen in Ihrer Textdatei durchzuführen dies zu beheben. Sie können dies mit Python oder einfach in einem Editor wie Notepad ++ tun. Suche nach dem Ausdruck:

Name:.+(Name: (?!Name:).+) 

und ersetzen sie durch

$1 

in Ihrer Textdatei dieser Ausdruck alle Zeilen finden, die mit

Name: 

beginnen und ersetzen Sie es mit:

Name: Bob 
0

Ich nehme an, Sie wissen, wie man die Textdatei Zeile für Zeile in Python liest. Unter der Annahme, dass Sie jede Zeile in einen String s

>>> s = "Name: Name: Name: Bob" 
>>> s2 = "Name: Bob" 
>>> 
>>> s_split = s.split(":") 
>>> s_split 
['Name', ' Name', ' Name', ' Bob'] 
>>> result = ": ".join(s_split[-2:]) 
>>> result 
' Name: Bob' 
>>> result = ": ".join(s_split[-2:]).strip() 
>>> result 
'Name: Bob' 

das erste Teil genannt lesen Sie die Zeichenfolge in eine Liste von Strings aufgeteilt, wobei: das Trennzeichen. Der Join übernimmt die letzten zwei Strings in der Liste und verbindet sie zusammen mit dem:. Wenn die Linie normal ist, funktioniert es. Es funktioniert auch für eine beliebige Anzahl von fehlerhaften Etiketten