AttributeError: 'str' object has no attribute 'from_header' - string

I am new to python. Looks like many people are facing a similar type of error. Solutions to other people's related errors don't solve my error. Why am I getting this error, and how can I fix it?
Thank you.
AttributeError: 'str' object has no attribute 'from_header'
Here's the error report:
*Traceback (most recent call last):
File "./../bin/make_json.py", line 169, in
(headerList, headers) = readHeaders(args.hdr_file)
File "/home3/grad3/kpatel3/new_parser-gen/lib/python/HeaderLib.py", line 445, in readHeaders
from_fields = item.next_header.mapping.from_header.asList()
AttributeError: 'str' object has no attribute 'from_header'
make: *** [../examples/headers-datacenter.json] Error 1
*
Here is my piece of code:
class HeaderInfo:
"""Simple class for returning header info"""
def __init__(self, length, lenIsVar, matchBytes, match):
self.length = length
self.lenIsVar = lenIsVar
self.matchBytes = matchBytes
self.match = match
class HeaderInfoAll:
"""Simple class for returning header info for all length/match combos"""
def __init__(self, lenIsVar, lenBytes, lenMatch, lengths, nxtHdrBytes, nxtHdrMatch, nxtHdrs, defNxtHdrVal):
self.lenIsVar = lenIsVar
self.lenBytes = lenBytes
self.lenMatch = lenMatch
self.lengths = lengths
self.nxtHdrBytes = nxtHdrBytes
self.nxtHdrMatch = nxtHdrMatch
self.nxtHdrs = nxtHdrs
self.defNxtHdrVal = defNxtHdrVal
hdrLengths = {}
def readHeaders(filename):
"""Read all of the headers from a file"""
fh = open(filename)
data = fh.read()
fh.close()
parser = getHeaderBNF()
intRE = re.compile(r'^\d+$')
opRE = re.compile(r'^[+\-*]|<<|>>$')
refCounts = {}
headerList = []
headers = {}
for item in parser.parseString(data, True):
if item.hdr not in headers:
hdr = Header(item.hdr)
headerList.append(hdr)
headers[item.hdr] = hdr
if item.fields != '':
for fieldData in item.fields:
(name, width) = fieldData[0:2]
if width == '*':
width = None
else:
width = int(width)
hdr.addField(name, width)
if len(fieldData) == 3:
hdr.addExtractField(name)
if item.next_header != '':
if item.next_header.field != '':
hdr.setNextHeader(str(item.next_header.field))
else:
from_fields = item.next_header.mapping.from_header.asList()
Can anyone help?

Related

Function to read specified single column from a csv file in python without using libraries and it should return column name and values into list

Getting error "TypeError: 'list' object is not callable", I have changed the parenthesis into square bracket but still not working.
def getColumnType(value):
dataType = None;
try:
numericVal = int(value)
dataType =int;
except ValueError:
numericVal = float(value)
dataType = float;
return dataType
def extractColFromFile(fileName,colIdx):
try:
columnName = ""
datalist = []
with open(fileName) as file:
firstLine = file.readline().strip()
colCount = firstLine.count(',') + 1
contents = [x.strip() for x in file.readlines()]
floatCount = 0
if colIdx in range(0,colCount):
columnName = firstLine.split(',')[colIdx]
for line in contents:
columns = line.split(',')
for idx,data in enumerate(columns):
if (idx == colIdx):
if(getColumnType(data) == float):
floatCount += 1
datalist.append(data)
if( floatCount > 0):
classType = float
else:
classType = int
result = list(map(classType, datalist))
return columnName, result
else:
print("invalid column index value");
except OSError as e:
print(e)
x = int(input("Enter a number: "))
result = extractColFromFile("task1.csv",x)
print (result)

'map' object is not subscriptable

I am trying to execute the codes from this link
https://zulko.github.io/blog/2014/06/21/some-more-videogreping-with-python/
import re # module for regular expressions
def convert_time(timestring):
""" Converts a string into seconds """
nums = map(float, re.findall(r'\d+', timestring))
return 3600*nums[0] + 60*nums[1] + nums[2] + nums[3]/1000
with open("Identity_2003.srt") as f:
lines = f.readlines()
times_texts = []
current_times , current_text = None, ""
for line in lines:
times = re.findall("[0-9]*:[0-9]*:[0-9]*,[0-9]*", line)
if times != []:
current_times = map(convert_time, times)
elif line == '\n':
times_texts.append((current_times, current_text))
current_times, current_text = None, ""
elif current_times is not None:
current_text = current_text + line.replace("\n"," ")
print (times_texts)
from collections import Counter
whole_text = " ".join([text for (time, text) in times_texts])
all_words = re.findall("\w+", whole_text)
counter = Counter([w.lower() for w in all_words if len(w)>5])
print (counter.most_common(10))
cuts = [times for (times,text) in times_texts
if (re.findall("please",text) != [])]
from moviepy.editor import VideoFileClip, concatenate
video = VideoFileClip("Identity_2003.mp4")
def assemble_cuts(cuts, outputfile):
""" Concatenate cuts and generate a video file. """
final = concatenate([video.subclip(start, end)
for (start,end) in cuts])
final.to_videofile(outputfile)
assemble_cuts(cuts, "please.mp4")
But the assemble_cuts function is not working . I am using python3.x
it is giving me an error
Traceback (most recent call last):
File "<ipython-input-64-939ee3d73a4a>", line 47, in <module>
assemble_cuts(cuts, "please.mp4")
File "<ipython-input-64-939ee3d73a4a>", line 44, in assemble_cuts
for (start,end) in cuts])
File "<ipython-input-64-939ee3d73a4a>", line 43, in <listcomp>
final = concatenate([video.subclip(start, end)
File "<ipython-input-64-939ee3d73a4a>", line 6, in convert_time
return 3600*nums[0] + 60*nums[1] + nums[2] + nums[3]/1000
TypeError: 'map' object is not subscriptable
Could you help me to solve this problem?
Fixed it.
def convert_time(timestring):
""" Converts a string into seconds """
nums = list(map(float, re.findall(r'\d+', timestring)))
return 3600*nums[0] + 60*nums[1] + nums[2] + nums[3]/1000

Im trying to use the classes that i made(Vehicle and customer), but i get "TypeError: object() takes no parameters". What am i doing wrong?

Im trying to use the classes that i made(Vehicle and customer), but i get "TypeError: object() takes no parameters" every time i try to create ether of this objects. What am i doing wrong?
import sys
import csv
vehicle = 0
customers = []
class Vehicle:
def _init_(self, number, capacity):
self.number = number
self.capacity = capacity
class customer:
def _init_(self, custNo, xCord, yCord, demand, readyT, dueDate, serviceTime):
self.custNo = custNo
self.xCord = xCord
self.yCord = yCord
self.demand = demand
self.readyT = readyT
self.dueDate = dueDate
self.serviceT = serviceTime
def read():
global vehicle
with open('C101 BUENO.csv') as cvs_file:
cvs_reader = csv.reader(cvs_file, delimiter=';')
line = 0
for row in cvs_reader:
print(line)
if line == 0 or line == 2:
line += 1
elif line == 1:
vehicle = Vehicle(row[0], row[1])
line += 1
else:
c = customer(row[0],row[1],row[2],row[3],row[4],row[5],row[6])
customers.append(c)
line += 1
read()

Runtime/Resource Warning error in Python

I was trying to run this code and encountered a run time error. I am not able to debug the code. I do believe that the error lies in functions huffman_encode and huffman_decode. The error showing is the resource warning error. Here is the code:
from linked_list import *
from huffman_bits_io import HuffmanBitsWriter as writer, HuffmanBitsReader as reader
import unittest
class Leaf:
'''class that implements Leaf'''
def __init__(self, parent, value, code, frequency):
self.parent = parent
self.frequency = frequency
self.value = value
self.code = code
def __eq__(self, other):
return type(other) == Leaf and self.parent == other.parent and self.frequency ==other.frequency and self.value==other.value and self.code==other.code
def __repr__(self):
return "[ {}, frequency = {} ]".format(self.code, self.frequency)
class Node:
'''class that implements Node'''
def __init__(self, parent, code, lchild, rchild, frequency):
self.parent = parent
self.code = code
self.frequency = frequency
self.lchild = lchild
self.rchild = rchild
def __eq__(self, other):
return type(other) == Node and self.parent==other.parent and self.code == other.code and self.frequency == other.frequency and self.lchild == other.lchild and self.rchild == other.rchild
def __repr__(self):
return "{}, freq = {}\n\left = {}\n\right = {}".format(self.code, self.frequency, self.lchild.___repr__(), self.rchild.__repr__())
def strip(string, seq):
'''this function cuts sequence from beginning of string if possible and returns result '''
if len(seq) > len(string):
return string
for i in range(len(seq)):
if seq[i] != string[i]:
return string
else:
return string[len(seq):]
def find(lst, item):
'''this function finds index of first occurrence of given element in the list and returns it or raise error if there is no such element'''
for i in range(lst.length):
if get(lst, i).value[0] == item:
return i
else:
raise ValueError
def string_traverse(node):
'''this function returns string representation of tree in pre-order traversal'''
lst = empty_list()
traverse(node, lst) #calls traverse
result_string = ''
for i in range(lst.length): #accumulate string from lst list
result_string += chr(get(lst, i).value)
return result_string
def traverse(node, code):
'''this function traverse the try and return list of leaf's value(helper for string_traverse)'''
if type(node) == Leaf:
code = add(code, node.value, code.length) #if node is Leaf than terminate recursion and return character
else:
traverse(node.lchild, code) #recursive call
traverse(node.rchild, code) #recursive call
def count_occurrences(file_name):
'''this function returns list that represent occurrence of every character of given string'''
with open(file_name) as file: #reads file
data = file.read()
lst = list()
for i in range(len(data)): #creates list of integer representation of string
lst.append(ord(data[i]))
data = lst
lst = empty_list()
for char in data: #this loop calculates occurrences of characters in the string
try:
index = find(lst, char)
lst = set(lst, index, (char, get(lst, index).value[1] + 1))
except ValueError:
lst = add(lst, (char, 1), 0)
lst = sort(lst, lambda x: x.value[1], False) #sorts occurrences
return lst
def comes_before(el1, el2):
'''this function returns True if el1 leaf should come before el2 leaf in Huffman tree meaning'''
if el1[1] < el2[1] or (el1[1] == el2[1] and type(el1[0]) is int and type(el2[0]) is int and el1[0] < el2[0]):
return True
else:
return False
def build_tree(occurrences):
'''this function returns Huffman tree based on given list of occurrences'''
if occurrences.length == 1: #if we have only one character returns Leaf with this character and code '0'
return Leaf(None, get(occurrences, 0).value[0], '0', get(occurrences, 0).value[1])
while occurrences.length != 1: #algorith described in the task
el1, occurrences = remove(occurrences, 0)
el2, occurrences = remove(occurrences, 0)
el1, el2 = el1.value, el2.value
if not comes_before(el1, el2): #finds order of elements in the tree
el1, el2 = el2, el1
new = Node(None, '', None, None, el1[1] + el2[1]) #creates new node
if type(el1[0]) is Node:
el1[0].code = '0' #sets up code for node
el1[0].parent = new
new.lchild = el1[0]
else:
new.lchild = Leaf(new, el1[0], '0', el1[1]) #if el1 is character not Node we will create leaf for that character
if type(el2[0]) is Node:
el2[0].code = '1' #sets up code for node
el2[0].parent = new
new.rchild = el2[0]
else:
new.rchild = Leaf(new, el2[0], '1', el2[1]) #if el2 is character not Node we will create leaf for that character
occurrences = insert_sorted(occurrences, (new, new.frequency), comes_before) #inserts new node
return get(occurrences, 0).value[0]
def collect_code(node, code = ''):
'''this function traverse Huffman tree and collect code for each leaf and returns them as nested list(helper for create_code)'''
if type(node) == Leaf:
lst = empty_list()
return add(lst, (node.value, code + node.code), 0) #if node is Leaf terminates recursion and returns code for the leaf
else:
lst = empty_list()
lst = add(lst, collect_code(node.lchild, code + node.code), 0) #recursive call
lst = add(lst, collect_code(node.rchild, code + node.code), 0) #recursive call
return lst
def create_code(tree):
'''this function unpack result of calling collect_code and return Huffman code as a list of tuples'''
code = collect_code(tree) #calls collect code
i = 0
while i < code.length: #this loop unpacks list
if type(get(code, i).value) is not tuple:
item, code = remove(code, i)
for j in range(item.value.length):
code = add(code, get(item.value, j).value, i)
continue
i += 1
return code
def huffman_encode(input_file, output_file):
'''task describe this function'''
occurrences = count_occurrences(input_file)
tree = build_tree(occurrences)
string = empty_list()
t = traverse(tree, string)
code = create_code(tree)
with open(input_file) as file:
string = file.read()
result_string = ''
for i in range(len(string)): #this loop encodes string using code produced by create_code function
for j in range(code.length):
temp = get(code, j).value
if string[i] == chr(temp[0]):
result_string += temp[1]
break
for i in range(occurrences.length):
temp = get(occurrences, i).value
occurrences = set(occurrences, i, (chr(temp[0]), temp[1]))
occurrences = sort(occurrences, lambda x: x.value[0], False)
file = writer(output_file)
file.write_int(code.length)
for i in range(occurrences.length):
temp = get(occurrences, i).value
file.write_byte(ord(temp[0]))
file.write_int(temp[1])
file.write_code(result_string)
file.close()
return string_traverse(tree)
def huffman_decode(input_file, output_file):
'''task describe this function'''
file = reader(input_file)
number_of_codes = file.read_int()
occurrences = empty_list()
for i in range(number_of_codes):
char = file.read_byte()
number = file.read_int()
occurrences = add(occurrences, (char, number), 0)
occurrences = sort(occurrences, lambda x: x.value[1], False)
tree = build_tree(occurrences)
code = sort(create_code(tree), lambda x: x.value[0], False)
occurrences = sort(occurrences, lambda x: x.value[0], False)
quantity_of_bits = 0
for i in range(code.length):
quantity_of_bits += get(occurrences, i).value[1]*len(get(code, i).value[1])
occurrences = sort(occurrences, lambda x: x.value[1], False)
bit_string = ''
for i in range(quantity_of_bits):
bit_string = bit_string + ('1' if file.read_bit() else '0')
result_string = ''
while bit_string: #this loop decodes string using code produced by create_code function
for j in range(code.length):
temp = get(code, j).value
stripped = strip(bit_string, temp[1])
if len(stripped) < len(bit_string):
result_string += chr(temp[0])
bit_string = stripped
break
with open(output_file, 'w') as file:
file.write(result_string)
file.close()
class Test(unittest.TestCase):
def test_strip1(self):
self.assertEqual(strip('123456', '123'), '456')
def test_strip2(self):
self.assertEqual(strip('123', '4567'), '123')
def test_strip3(self):
self.assertEqual(strip('123', '456'), '123')
def test_find(self):
lst = empty_list()
lst = add(lst, (1, 'b'), 0)
lst = add(lst, (2, 'a'), 1)
self.assertEqual(find(lst, 2), 1)
def test_find_raise(self):
lst = empty_list()
lst = add(lst, (1, 'b'), 0)
lst = add(lst, (2, 'a'), 1)
self.assertRaises(ValueError, find, lst, 5)
def test_occurrences(self):
lst = empty_list()
lst = add(lst, (97, 5), 0)
lst = add(lst, (98, 3), 0)
lst = add(lst , (99, 7), 2)
self.assertEqual(str(count_occurrences(r'test2.txt')), str(lst))
def test_create_code_and_tree_build(self):
occurrences = count_occurrences(r'test2.txt')
tree = build_tree(occurrences)
code = create_code(tree)
code = sort(code, lambda x: x.value[0], False)
self.assertEqual(str(code), "[(97, '11'), (98, '10'), (99, '0')]")
def test_huffman_encode_decode(self):
string = huffman_encode(r'test1.txt', r'test_out.txt')
huffman_decode(r'test_out.txt', r'test_decode.txt')
self.assertEqual(string, 'a')
with open(r'test1.txt') as file1:
with open(r'test_decode.txt') as file2:
self.assertEqual(file1.read(), file2.read())
file2.close()
file1.close()
def test_huffman_encode_decode3(self):
string = huffman_encode(r'test2.txt', r'test2_out.txt')
huffman_decode(r'test2_out.txt', r'test2_decode.txt')
self.assertEqual(string, 'cba')
with open(r'test2.txt') as file1:
with open(r'test2_decode.txt') as file2:
self.assertEqual(file1.read(), file2.read())
file2.close()
file1.close()
def test_huffman_encode_decode2(self):
string = huffman_encode(r'test3.txt', r'test3_out.txt')
huffman_decode(r'test3_out.txt', r'test3_decode.txt')
self.assertEqual(string, 'edcba')
with open(r'test3.txt') as file1:
with open(r'test3_decode.txt') as file2:
self.assertEqual(file1.read(), file2.read())
file2.close()
file1.close()
if __name__ == '__main__':
unittest.main()
And following is the error:
...
Warning (from warnings module):
File "C:\Users\Vikas\Documents\fwdregardingprojectdevelopment\huffman.py", line 212
with open(output_file, 'w') as file:
ResourceWarning: unclosed file <_io.BufferedReader name='test_out.txt'>
.
Warning (from warnings module):
File "C:\Users\Vikas\Documents\fwdregardingprojectdevelopment\huffman.py", line 212
with open(output_file, 'w') as file:
ResourceWarning: unclosed file <_io.BufferedReader name='test3_out.txt'>
.
Warning (from warnings module):
File "C:\Users\Vikas\Documents\fwdregardingprojectdevelopment\huffman.py", line 212
with open(output_file, 'w') as file:
ResourceWarning: unclosed file <_io.BufferedReader name='test2_out.txt'>
.....
----------------------------------------------------------------------
Ran 10 tests in 0.272s
OK
it seems somewhere in your code file 'out_file' is opened and not closed
find where it is opened and close it :
out_file.close()

Pass a keyword argument to a decorator python

I have a wrapper function, like this:
def check(func):
#wraps(func)
def wrap(*args, **kwargs):
while 1:
try:
return func(*args, **kwargs)
except AssertionError:
print('Invalid Input')
except ValueError:
print('Invalid Input')
return wrap
However I want to make the error input customizable.
I tried this:
def check(func, errorText='Invalid Input’):...
Using it like this:
#check(errorText = 'Input must be in {}'.format(tiles))
And got this:
Traceback (most recent call last):
#check(errorText = 'Input must be in {}'.format(tiles))
TypeError: check() missing 1 required positional argument: ‘func'
I tried this:
...
def wrap(*args, errorText = ‘Invalid Input’, **kwargs):
...
And got no error, but it still printed Invalid Input as the error message.
Here is some of the code I am using:
#check
def getInt(_min, _max, _type, errorText = ’Number is not in correct range'):
n = int(input("Enter {} number (inbetween {} and {}): ".format(_type, _min, _max)))
assert _min <= n <= _max
return n
#check
def setAt(board, new, errorText = ’Space is already filled.'):
row = getInt(1, 5, 'row')-1
col = getInt(1, 5, 'column')-1
assert board[row][col] == '.'
board[row][col] = new
#check
def getTile(errorText = ‘Input must be in {}’.format(tiles)):
tile = input("Enter tile to choose: ").upper()
assert tile in tiles
return tile

Resources