diff --git a/pytools/__init__.py b/pytools/__init__.py
index 5a90817415ea76167e5295b339667c008f0c4877..d449a72134abcd044c2b350ce9d2fc66dbf180ce 100644
--- a/pytools/__init__.py
+++ b/pytools/__init__.py
@@ -1597,8 +1597,9 @@ class Table:
 
         return "\n".join(lines)
 
-    def csv(self, dialect='excel', **fmtparams):
+    def csv(self, dialect='excel', csv_kwargs=None):
         """Returns a string containing a CSV representation of the table.
+        The `dialect` and `csv_kwargs` parameters are passed to :func:`csv.writer`.
 
         .. doctest ::
 
@@ -1613,15 +1614,18 @@ class Table:
         import csv
         import io
 
+        if csv_kwargs is None:
+            csv_kwargs = {}
+
         # Default is '\r\n'
-        if 'lineterminator' not in fmtparams:
-            fmtparams['lineterminator'] = '\n'
+        if 'lineterminator' not in csv_kwargs:
+            csv_kwargs['lineterminator'] = '\n'
 
         output = io.StringIO()
-        writer = csv.writer(output, dialect, **fmtparams)
+        writer = csv.writer(output, dialect, **csv_kwargs)
         writer.writerows(self.rows)
 
-        return output.getvalue().rstrip(fmtparams['lineterminator'])
+        return output.getvalue().rstrip(csv_kwargs['lineterminator'])
 
     def latex(self, skip_lines=0, hline_after=None):
         if hline_after is None: