2013-08-06 3 views
0

Программа Python 3 позволяет людям выбирать из списка имен сотрудников. Данные, хранящиеся на текстовый файл выглядит следующим образом: («Ларри», 3, 100) (быть имя лица, недели работали и оплата)Чтение из текстового файла и присвоение данных новой переменной

Мне нужен способ, чтобы назначить каждую часть текстового файла новую переменную , чтобы пользователь мог ввести новое количество недель, и программа вычисляет новый платеж.

Ниже мой код и попытка выяснить его.

import os 
choices = [f for f in os.listdir(os.curdir) if f.endswith(".txt")] 
print (choices) 
emp_choice = input("choose an employee:") 

file = open(emp_choice + ".txt") 

data = file.readlines() 
name = data[0] 
weeks_worked = data[1] 
weekly_payment= data[2] 

new_weeks = int(input ("Enter new number of weeks")) 
new_payment = new_weeks * weekly_payment 
print (name + "will now be paid" + str(new_payment)) 

ответ

0

В настоящее время вы назначаете первые три строки образуют файл name, weeks_worked и weekly_payment. но то, что вы хотите (я думаю), состоит в том, чтобы отделить одну строку, отформатированную как ('larry', 3, 100) (есть ли в каждом файле только одна строка?).

, так что вы, вероятно, хотите код, как:

from re import compile 

# your code to choose file 

line_format = compile(r"\s*\(\s*'([^']*)'\s*,\s*(\d+)\s*,\s*(\d+)\s*\)") 
file = open(emp_choice + ".txt") 
line = file.readline() # read the first line only 
match = line_format.match(line) 
if match: 
    name, weeks_worked, weekly_payment = match.groups() 
else: 
    raise Exception('Could not match %s' % line) 

# your code to update information 

регулярное выражение выглядит сложным, но на самом деле довольно просто:

\(...\) matches the parentheses in the line 
\s*  matches optional spaces (it's not clear to me if you have spaces or not 
     in various places between words, so this matches just in case) 
\d+  matches a number (1 or more digits) 
[^']* matches anything except a quote (so matches the name) 
(...) (without the \ backslashes) indicates a group that you want to read 
     afterwards by calling .groups() 

и они построены из более простых частей (как * и + и \d), которые описаны в http://docs.python.org/2/library/re.html

если вы хотите повторить для многих строк, вы, вероятно, хотите что-то вроде:

name, weeks_worked, weekly_payment = [], [], [] 
for line in file.readlines(): 
    match = line_format.match(line) 
    if match: 
     name.append(match.group(1)) 
     weeks_worked.append(match.group(2)) 
     weekly_payment.append(match.group(3)) 
    else: 
     raise ... 
+0

Нет ли способа иметь цикл for, который смотрит на каждый элемент текстового файла и присваивает ему номер индекса. Тогда мои переменные могут соответствовать номерам индексов? –

+0

см. Дополнительные правки. –

Смежные вопросы