Ich habe vor zwei, drei Tagen mit einem kleinen Projekt angefangen und stoße aktuell an ein merkwürdiges Problem. Ich verwende eine globale Variable welche ich in einer Funktion ändere. Obwohl ich die Variable in der Funktion als Global deklariere verschwinden die Änderungen jedoch.
Ich weiss das globale Variablen als schlechter Stil gelten, jedoch gelingt es mir nicht sie so vernünftig an die Funktion durchzureichen (und anschliessend wieder zurück) das alles funktioniert.
Aktuell liest das Programm Zugangsdaten zu Testsystemen aus einer Datei aus. Ziel ist das man über das Programm neue Daten zu der Datei hinzufügen kann. Diese soll sich das Programm selber zusammensuchen. Die Datei ist in mehrere Abschnitte aufgeteilt für die verschiedenen Systeme und am Ende steht ein Block mit Konfigurationsinformationen. Das Programm soll die verschiedenen Zugangsdaten in Listen speichern die den Systemen entsprechen und den Konfigurationsbereich einfach übernehmen.
Mein Problem ist, egal was ich mache, die "other" Variable hat am Ende nur die letzte Zeile der Datei. Aus mir nicht bekannten Gründen verliere ich immer alles von den Durchläufen davor.
Ich gehe davon aus das ich hier viel zuviel gepostet habe, aber ich kann nicht sicher sagen welche Information ihr benötigt.
Code: Alles auswählen
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Decription: Programm zur Hinzufügen von Credentials zur access.js
# Mögliche Eingaben via Aufruf: merchantid
# todo: Alles
# todo: Aktuell erst einmal die Merchants in Listen aufnehmen
import sys
from operator import itemgetter
class merchants:
def __init__(self):
self.data = ""
self.merchantlist = []
def add(self, data):
# print(data)
''''
todo: prepare aufrufen und gültige Daten übergeben. Sicherstellen das nur Zeilen
todo: mit Merchantinformationen übergeben werden.
'''
if data.startswith('["'):
self.prepare(data)
def getall(self):
return(self.merchantlist)
def prepare(self,prepstring):
string = prepstring[prepstring.find('"')+1:]
string = string[:string.find('"')]
self.merchantlist.append(string.split("|"))
# print(string)
# todo: Fehlerprüfung einbauen
# todo: Rückgabe der Daten
def fillVariables(lineFromFile, state):
global other
if state == "other":
# other = other + lineFromFile
# print(lineFromFile)
# print other
other += lineFromFile
elif state == "test":
test.add(lineFromFile)
elif state == "staging":
staging.add(lineFromFile)
elif state == "vagrantStaging":
vagrantStaging.add(lineFromFile)
elif state == "vagrantLocal":
vagrantLocal.add(lineFromFile)
else:
print("Error!!! Wrong state: " + state)
sys.exit("1")
def readFile():
state = "neutral"
f = open('/home/myfolder/Documents/testsystem/access.js', 'r')
for line in f:
line = line.rstrip('\n')
line = line.lstrip('\t ')
#print(line)
if line.startswith("const test"):
state = "test"
elif line.startswith("const staging"):
state = "staging"
elif line.startswith("const vagrantStaging"):
state = "vagrantStaging"
elif line.startswith("const vagrantLocal"):
state = "vagrantLocal"
elif line.startswith("// Areas"):
state = "other"
fillVariables(line, state)
return()
test = merchants()
staging = merchants()
vagrantStaging = merchants()
vagrantLocal = merchants()
other = ""
readFile()
print("Test: " + str(sorted(test.getall(), key=itemgetter(0))))
print("Staging: " + str(sorted(staging.getall(), key=itemgetter(0))))
print("VagrantStaging: " + str(sorted(vagrantStaging.getall(), key=itemgetter(0))))
print("VagrantLocal: " + str(sorted(vagrantLocal.getall(), key=itemgetter(0))))
print(other)