2016-04-19 7 views
-6

ich eine txt-Datei, die Benutzer-IDs für Selenium Tests speichert, die so etwas wie dieses hat:Variablen aus txt-Datei

admin = ['[email protected]', 'password1234'] 
basicUser = ['[email protected]', 'password1234'] 

und möchten Werte für admin/basicUser aus meiner txt-Datei in meinem Python-Skript zuweisen , sagen etwas wie folgt aus:

import file.txt  
file = open('file.txt', 'r') 
admin = file(admin) 
basicUser = file(basicUser) 

und wenn ich rufen Sie die changePassword Methode für meine Loginpage

loginAs(admin) 
changePassword('NEWpassword') 

es würde automatisch aktualisieren und speichern Sie die TXT-Datei für die nächste Anmeldung.

Ich habe die Foren seit Stunden durchforstet und kann keine gute/elegante Lösung finden, keine Idee?

+0

Sie sollten mit JSON als Dateiformat betrachten. – Schore

+0

Sie müssen eine Funktion schreiben, um die Datei zu lesen und dieses unbequeme Dateiformat in eine Python-Datenstruktur umzuwandeln. Dann müssen Sie eine Funktion schreiben, die die Datenstruktur in diese Zeilen zurücküberträgt. Welcher Teil davon ist ein Problem? Die beste Idee wäre, ein anderes Dateiformat wie _Schore_ zu verwenden. – Matthias

Antwort

2

Sie können .yaml Datei verwenden, um Ihre Benutzer zu speichern. Es speichert Ihre Daten wie das JSON-Format.

import yaml 
with open(FILE_PATH, 'r') as f: 
    users_dict = yaml.load(f) 
print(users_dict) 
print(users_dict['admin']) 
### {passwd: 123, user: [email protected]} 
print(users_dict['admin']['passwd']) 
### 123 

Nach dem Laden mit den Daten wie ein dict

Um Ihre Benutzer Daten speichern arbeiten können:

admin: {passwd: 123, user: [email protected]} 
basicUser: {passwd: pass45, user: [email protected]} 

Wenn Sie Ihre Benutzer aus Datei laden

users_dict['admin']['passwd'] = 345 

with open(FILE_PATH, 'w') as f: 
    yaml.dump(users_dict, f) 
0

Sie könnte es einfach so machen, um Ihr aktuelles Dateiformat zu behalten:

import re 
load_pattern = r"^(\w+)\s*=\s*\[\s*'(.+?)'\s*,\s*'(.+?)'\s*\]$" 
save_pattern = "{} = ['{}', '{}']" 

def load_users(filename): 
    users = {} 
    with open(filename), as f: 
     for line in f: 
      try: 
       name, email, pw = re.fullmatch(load_pattern, line.strip()).groups() 
       users[name] = [email, pw] 
      except AttributeError: 
       pass # do nothing if the line does not match our pattern 
    return users 

def save_users(users, filename): 
    with open(filename, "w") as f: 
     for name in users: 
      email, pw = users[name] 
      print(save_pattern.format(name, email, pw), file=f) 

Wie können Sie es verwenden:

# Load user dictionary from file: 
users = load_users("file.txt") 

# Iterate over all stored users: 
for name in users: 
    # Print each user's data: 
    print("Username: ", name) 
    print(" -> Email: ", users[name][0]) 
    print(" -> Password:", users[name][1]) 

    # Change each user's password in our dictionary to the capitalized username: 
    users[name][1] = name.upper() 

# Save the changed user information to a file 
# (creates new file or overwrites old one if already existing): 

save_users(users, "file2.txt") 
+0

danke, tolle Antwort, mein Code sah ähnlich aus. Ich denke, mit JSON scheint eine elegantere Lösung zu sein, und das war es, wonach ich suchte –

Verwandte Themen