Форум сайта python.su
Здравствуйте. Извините, если дергаю зря простым вопросом.
Осваиваю Python, и не все понимаю.. некоторые вещи даже с чтением манов =(
есть файл base.txt и файл со скриптом
Есть такой код.
#!/usr/bin/env python
# coding: utf-8
base_data = open('base.txt')
base_line = base_data.readline()
base_list = base_line.split(' ')
var_date = base_list[0]
var_product = base_list[1]
var_price = base_list[2]
sales = {
'date' : var_date,
'product' : var_product,
'price' : var_price
}
print sales
20-01-2010 MacBook_Pro_2101 2.11
20-01-2010 player 2.11
20-01-2010 Miiiiih 2.11
20-01-2010 Harman_kardon 2.11
#!/usr/bin/env python
# coding: utf-8
def baseOut(baseName):
base_data = open(baseName)
base_data_line = base_data.readline()
base_list = base_data_line.split(' ')
var_date = base_list[0]
var_product = base_list[1]
var_price = base_list[2]
sales = {
'date' : var_date,
'product' : var_product,
'price' : var_price
}
print sales
print baseOut('base.txt')
print baseOut('bbb.txt')
Офлайн
Открываешь файл, дальше читаешь все строки в список с помощью метода readlines. Дальше уже работаешь, как хочешь с ними:
items = open('base.txt').readlines()
for i in items:
...
Офлайн
у файлового объекта есть метод readlines
base = [item.split() for item in open("base.txt").readlines()]
[['20-01-2010', 'MacBook_Pro_2101', '2.11'],
['20-01-2010', 'player', '2.11'],
['20-01-2010', 'Miiiiih', '2.11'],
['20-01-2010', 'Harman_kardon', '2.11']]
Отредактировано (Янв. 19, 2010 22:25:20)
Офлайн
Всем уже спасибо =)!
@truporez а как словарь создать таким же способом? Ключи то не указаны.
По поводу примера я в итоге накрутил такой код
#!/usr/bin/env python
# coding: utf-8
def baseGet(baseName):
base = [item.split() for item in open(baseName).readlines()]
print base
def datesGet(baseName):
base = [item.split() for item in open(baseName).readlines()]
for x in base:
print x[0]
def productGet(baseName):
base = [item.split() for item in open(baseName).readlines()]
for x in base:
print x[1]
def priceGet(baseName):
base = [item.split() for item in open(baseName).readlines()]
for x in base:
print x[2]
def paymentGet(baseName):
base = [item.split() for item in open(baseName).readlines()]
prices = [item[2] for item in base]
print prices
paymentGet('base.txt')
def paymentGet(baseName):
base = [item.split() for item in open(baseName).readlines()]
prices = [item[2] for item in base]
sum = 0
for x in prices:
print x
Отредактировано (Янв. 20, 2010 11:59:16)
Офлайн
truporezНе учите людей плохому. readlines читает все строки в список и его возвращает.
у файлового объекта есть метод readlinesbase = [item.split() for item in open("base.txt").readlines()]
base = [item.split() for item in open("base.txt")]
Отредактировано (Янв. 20, 2010 12:30:31)
Офлайн
macgeraНазначить самому:
@truporez а как словарь создать таким же способом? Ключи то не указаны.
data = [dict(zip(("date", "product", "price"), line.split())) for line in test]
По поводу примера я в итоге накрутил такой кодПо-моему очень избыточен ваш код. Кроме того, в каждой функции происходит чтение файла, то есть если нужно вызвать две, то будете читать 2 раза одно и то же.
#!/usr/bin/env python
# coding: utf-8
def get_data(baseName):
return [dict(zip(("date", "product", "price"), line.split())) for line in test]
def print_dates(data):
for item in data:
print item["date"]
def print_product(data):
for item in data:
print item["product"]
def print_prices(data):
for item in data:
print item["price"]
def print_payment(data):
print sum([float(item["price"]) for item in data])
И еще вопрос, можно объединить все эти функции в класс, что бы при выводе присваивать имя продавца к примеру?Можно и нужно.
Отредактировано (Янв. 20, 2010 14:47:41)
Офлайн
Спасибо.
Вот блин ну нету в 2-х книгах таких примеров =(
def print_payment(data):
print sum([float(item["price"]) for item in data])
#!/usr/bin/env python
# coding: utf-8
def get_data(baseName):
return [dict(zip(("date", "product", "price"), line.split())) for line in test] #что за мия test?
def print_dates(data): #Переменная data, я честно не понял откуда она и как потом вызывать функцию?
for item in data:
print item["date"]
def print_product(data):
for item in data:
print item["product"]
def print_prices(data):
for item in data:
print item["price"]
def print_payment(data):
print sum([float(item["price"]) for item in data])
class sales:
def __init__(self, name):
self.name = baseName
def get_data(baseName):
return [dict(zip(("date", "product", "price"), line.split())) for line in baseName] #с test выдает ошибку...
def print_dates(data):
for item in data:
print item["date"]
def print_product(data):
for item in data:
print item["product"]
def print_prices(data):
for item in data:
print item["price"]
def print_payment(data):
print sum([float(item["price"]) for item in data])
DimaBase = sales('base.txt')
DimaBase.print_payment()
Отредактировано (Янв. 20, 2010 17:53:53)
Офлайн
macgeraА так?:В жизни бы не догадался =(def print_payment(data):
print sum([float(item["price"]) for item in data])
sum = 0
for item in data:
sum += item["price"]
print sum
def print_dates(data): #Переменная data, я честно не понял откуда она и как потом вызывать функцию?data - это то, что возвращает get_data
for item in data:
print item
data = get_data('base.txt')
print_dates(data)
print_prices(data)
# и так далее
def get_data(baseName):
return [dict(zip(("date", "product", "price"), line.split())) for line in open(baseName)]
Это зависит от того, какая стоит задача.так?DimaBase = sales('base.txt')
DimaBase.print_payment()
sales = Sales(open('base.txt'))
print sales.get_paiment()
print '\n'.join(sales.get_dates())
Офлайн
EdТак вообщем-то получается все я так и делал, но в данном случае, выдает ошибку, насколько я понимаю что это не число.. вот и ломал голову как преобразовать. В любом случае спасибо! вы мне много пищи для размышления кинули.. а то блин времени много нет.. и в книгах не всегда понятные примеры.. Хороший форум!
А так?:
Код:
sum = 0
for item in data:
sum += item
print sum
EdБуду пробовать…
Код:
sales = Sales(open('base.txt'))
print sales.get_paiment()
print ‘\n’.join(sales.get_da
Отредактировано (Янв. 20, 2010 20:50:59)
Офлайн
упс, это я ошибся. Я имел в виду это:
sum = 0.0
for item in data:
sum += float(item["price"])
print sum
Офлайн