Błąd w kodzie

0
import csv
import os
import copy

from os import listdir
from os.path import isfile, join
from fractions import gcd

def skroc(x):
	z = gcd(x[0], x[1])
	return [x[0]/z, x[1]/z]

def wartosc(x):
	if x[1] == 0:
		return x[0]*float("inf")
	else:
		return x[0]*1.0/x[1]

def mnoz(a, b):
	return skroc([a[0]*b[0], a[1]*b[1]])

def dziel(a, b):
	if b[0] == 0:
		return None
	else:
		return skroc([a[0]*b[1], a[1]*b[0]])

def dodaj(a, b):
	return skroc([a[0]*b[1]+b[0]*a[1], a[1]*b[1]])

def odejmij(a, b):
	return skroc([a[0]*b[1]-b[0]*a[1], a[1]*b[1]])

def RedukcjaGaussa(a):
	A = copy.deepcopy(a)
	
	n = len(A)
	if n == 0:
		return A
	
	m = len(A[0])
	if m == 0:
		return A
	
	# Krok 1
	warunek0 = True
	for i in range(0, n):
		if A[i][0][0] != 0:
			warunek0 = False
			break
	
	if warunek0:
		# Krok 2
		if m == 1:
			return A
		else:
			B = []
			for i in range(0, n):
				rzad = []
				for j in range(1, m):
					rzad.append(skroc(A[i][j]))
				B.append(rzad)
			B = RedukcjaGaussa(B)
			
			C = []
			for i in range(0, n):
				rzad = [[0, 1]]
				for j in range(1, m):
					rzad.append(skroc(B[i][j-1]))
				C.append(rzad)
			return C
	
	# Krok 3
	if A[0][0][0] == 0:
		# Krok 4
		iMin = 0
		for i in range(0, n):
			if wartosc(A[i][0]) != 0:
				iMin = i
				break
		A[0], A[iMin] = A[iMin], A[0]
	
	# Krok 5
	for j in range(1, n):
		for x in range(0, m):
			A[j][x] = odejmij(A[j][x], mnoz(dziel(A[j][0], A[0][0]), A[0][x]))
	
	# Krok 6
	D = []
	D.append([A[0][0]])
	for i in range(1, n):
		D.append([[0, 1]])
	
	if m == 0:
		return D
	else:
		E = copy.deepcopy(A)
		E.pop(0)
		for i in range(0, len(E)):
			E[i].pop(0)
		
		F = RedukcjaGaussa(E)
		
		for j in range(1, m):
			D[0].append(A[0][j])
		for i in range (1, n):
			for j in range (1, m):
				D[i].append(F[i-1][j-1])
		
		return D

def macierzNaCsv(A):
	csv = []
	for i in range(0, len(A)):
		rzad = []
		for j in range(0, len(A[i])):
			for x in range(0, 2):
				rzad.append(A[i][j][x])
		csv.append(rzad)
	return csv

files = [f for f in listdir('.') if isfile(f) and f[:4].lower() == "dane"]
for f in files:
	macierz = []
	B = []
	with open(f, 'r') as file:
		reader = csv.reader(file)
		for row in reader:
			rzad = []
			for m in range(0,len(row),2):
				rzad.append(skroc([int(row[m]), int(row[m+1])]))
			macierz.append(rzad)
		B = RedukcjaGaussa(macierz)
		
	with open(f, 'wb') as file:
		writer = csv.writer(file)
		writer.writerows(macierzNaCsv(B))

Co mogę zmieć w tym kodzie, żeby działał on poprawnie?
Zwraca mi błąd:
File "redukcjagaussa.py", line 137, in <module>
writer.writerows(macierzNaCsv(B))
TypeError: a bytes-like object is required, not 'str'
Niestety nie mam już pomysłów na doprowadzenie tego do ładu...

0

*Nie znam tej biblioteki, ale wg.komunikatu spróbował bym coś z

 byte() lub b'string'

[edit]
Ta funkcja zwraca tablice, a chyba wymagany jest inny typ ,zobacz:

>>> tablica = []
>>> type(tablica)
<class 'list'>

1 użytkowników online, w tym zalogowanych: 0, gości: 1