Converting Ruby to Python -
i'm trying convert ruby script python. i'm not familiar python getting typeerror
.
printer.rb
lease = struct.new(:property, :renter) lease_list = [] file.open('input.txt').readlines.each |line| p, r = line.split(' - ') lease_list << lease.new(p.tr('#', ''), r) end # sort decimal value lease_list.sort_by { |m| m.property.scan(/\d+/)[0].to_i }.each |lease| puts "\##{lease.property} - #{lease.renter}" end
printer.py
import re class lease: def __init__(self, renter=none, unit=none): self.renter = renter self.property = unit lease_list = [] import sys lines = open('input.txt', 'r') line in lines: l, m = line.split(' - ') lease_list.append(lease(l,m)) lines.close() print lease_list.sort(key=lambda lease: re.split(r"\d+", lease.property))
python error
traceback (most recent call last): file "printer.py", line 16, in <module> print lease_list.sort(key=lambda str: re.split(r"\d+", str)) file "printer.py", line 16, in <lambda> print lease_list.sort(key=lambda str: re.split(r"\d+", str)) file "/system/library/frameworks/python.framework/versions/2.7/lib/python2.7/re.py", line 171, in split return _compile(pattern, flags).split(string, maxsplit) typeerror: expected string or buffer
the problem here:
print lease_list.sort(key=lambda str: re.split(r"\d+", str))
the str
name [edit: see question edit history], which shouldn't use name, throwaways) assigned values contained in list , consequently passed re.split()
is object of type lease
:
lease_list.append(lease(l,m))
this isn't accepted argument re.split
likes munching on str
s. hence typeerror
. lease
has 2 attributes str
s after line.split(' - ')
:
self.renter = renter self.property = unit
use 1 of these in re.split()
(whichever required use-case) with:
print lease_list.sort(key=lambda obj: re.split(r"\d+", obj.renter))
or:
print lease_list.sort(key=lambda obj: re.split(r"\d+", obj.property))
forgot mention, sorting list
list.sort
return none
since sorts list in place, printing value here has no use.
Comments
Post a Comment