The second loop is not necessary here: you can do it all with one loop (reading the csv file and writing the shapefile without using the polyName and polyPart lists).
w = shapefile.Writer(shapefile.POLYGON)
w.field('name','C',50)
polyName, polyPart = [],[]
with open('your.csv', 'rb') as f:
reader = csv.DictReader(f)
for row in reader:
bl = [float(row['xl']),float(row['yb'])]
tl = [float(row['xl']),float(row['yt'])]
br = [float(row['xr']),float(row['yb'])]
tr = [float(row['xr']),float(row['yt'])]
parr = [tl, tr, br, bl, tl]
w.poly(parts=[parr])
w.record(row['name'])
w.save("your.shp')
Result in QGIS: