Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Grundlagen lernen:
- Benutze das with-Statement.
- Iteriere mit einer for-Schleife über die Zeilen der Datei.
- Benutze split() um die Zeilen zu bearbeiten.
- Erstelle damit das Dictionary.
Du solltest file nicht unbedingt überschreiben.
Zudem möchte ich dir das Python Tutorial ans Herz legen bzw hier die deutsche Übersetzung http://tutorial.pocoo.org/
>>> dic = {}
>>> with open("bla.txt") as f:
for line in f.readlines():
a, b = line.split()
dic[a] = b
>>> print dic
{'Hans': '1', 'Jens': '4', 'Peter': '2', 'Rolf': '3'}
>>>
PS: wie bist du auf den Code gekommen den du oben gepostet hast?
@Sr4l: Warum ist eigentlich dieses `readlines()` nicht totzukriegen… Man kann über die Zeilen in einem Dateiobjekt direlt iterieren ohne erst alle in eine Liste einlesen zu müssen.
Für 4 Zeilen soll's egal sein und auf viel mehr kommt shuang nicht wenn er sich nicht mit den basics von python beschäftigt und nur auf copy&p von code verlässt.
Um ehrlich zu sein habe ich auch kurz an .readline() gedacht aber ich schreibe lieber for schleifen
@Shuang
nicht unbedingt, aber du könntest ja z.B "Name: " durch "" ersetzen oder .split(":")[1].strip() es gibt tausende Möglichkeiten.
@Sr4l: Jetzt bin ich verwirrt. Was meinst Du damit das Du lieber ``for``-Schleifen schreibst!? Das ändert sich doch erst einmal gar nicht wenn man das an dieser Stelle sinnlose `readlines()` einfach weglässt. Also ``for line in f:`` statt ``for line in f.readlines():``.
Davon abgesehen geht es natürlich deutlich kürzer so: ``dic = dict(s.split() for s in f)``
Also was ich seit Tagen versucht habe ist mit Regulären Ausdrücken genau die Namen zu sortieren, aber hat nicht geklappt.
Ich konnte sie einfach nicht auslesen, geschweige den subtrahieren :)Ich habe so einiges ausprobiert. >>> Siehe unten.
from re import *
import re
def coctails():
datei = open("C:/Users/...............txt", "r").read()
dat = file('C:/Users.....................txt', 'w')
p = re.findall('(\w{5}:\s\w{7})', datei)
d = re.findall('(\w{4}:\s\w{3})', datei)
a = re.findall('(\w{5}:\s*\s\w)', datei)
r = re.findall(('\d+'), datei)
k = re.findall('(^Name $)', datei)
'''if p.findall(datei):
datei = datei.strip()#.replace("Person", "xxxxx")
dat.write(datei)'''
print p
print d
print r
print a
print k
'''
#while datei
# p = compile('[\d:]\s')
BlackJack hat geschrieben:@Sr4l: Jetzt bin ich verwirrt. Was meinst Du damit das Du lieber ``for``-Schleifen schreibst!? Das ändert sich doch erst einmal gar nicht wenn man das an dieser Stelle sinnlose `readlines()` einfach weglässt. Also ``for line in f:`` statt ``for line in f.readlines():``.
Wusste nicht das das geht dachte, das könnte man nur über ne while Schleife lösen. Danke.
shuang hat geschrieben:Sagen wir mal ich habe eine Textdatei mit folgendem Inhalt:
Name: Peter 19
Hans 39
Sarah 10
Lars 18
und ich habe noch eine weitere Textdatei:
Personen:
Peter 4
Hans 3
Sarah 2
Lars 3
Nun möchte ich das die Werte aus der 2ten Textdatei im ersteren subrahiert werden.
Sinn und Zweck? Was soll passieren wenn ein Name in Name aber in Personen vorkommt? Ist "Personen:" bzw. "Name:" immer die erste Zeile der Datei?
Ich dachte dein Beispiel damals mit dem Problem: "Name: Peter 19" das in einer Zeile zufällig vor dem Name noch ein "Name: " steht.
Genau ich habe 2Dateien mit den zuvor gezeigten Inhalten.
Ich möchte wenn z.b Peter im ersten und Peter im zweiten vorkommt den Wert aus der zweiten Datei abziehen. und die erste Datei dann mit den neuen Werten aktualisieren.
Beispiel
Text 1:
-----------------
Name: Peter
Figur: Bettler 4
Name: Guenther
Figur: Truil 10
@shuang: Du sagst Du hast Dateien mit den zuvor gezeigten Inhalten aber Dein aktuelles Beispiel sieht jetzt schon wieder etwas anders aus!? Ein wichtiger Teil beim Programmieren ist es sich über das Problem möglichst im klaren zu sein. Ist *das* jetzt die ganze Wahrheit oder sehen die Datenformate am Ende doch wieder anders aus?