How can I join a list into a string (caveat)?
Along the lines of my previous question, how can i join a list of strings into a string such that values get quoted cleanly. Something like:
['a', 'one "two" three', 'foo, bar', """both"'"""]
a, 'one "two" three', "foo, bar", "both\"'"
I suspect that the csv module will come into play here, but i'm not sure how to get the output I want.
Asked by: Kimberly548 | Posted: 01-10-2021
csv module you can do that way:
import csv writer = csv.writer(open("some.csv", "wb")) writer.writerow(the_list)
If you need a string just use
StringIO instance as a file:
f = StringIO.StringIO() writer = csv.writer(f) writer.writerow(the_list) print f.getvalue()
a,"one ""two"" three","foo, bar","both""'"
csv will write in a way it can read back later.
You can fine-tune its output by defining a
dialect, just set
escapechar, etc, as needed:
class SomeDialect(csv.excel): delimiter = ',' quotechar = '"' escapechar = "\\" doublequote = False lineterminator = '\n' quoting = csv.QUOTE_MINIMAL f = cStringIO.StringIO() writer = csv.writer(f, dialect=SomeDialect) writer.writerow(the_list) print f.getvalue()
a,one \"two\" three,"foo, bar",both\"'
The same dialect can be used with csv module to read the string back later to a list.Answered by: Sarah486 | Posted: 02-11-2021
On a related note, Python's builtin encoders can also do string escaping:
Answered by: Sydney779 | Posted: 02-11-2021
>>> print "that's interesting".encode('string_escape') that\'s interesting
Here's a slightly simpler alternative.
def quote(s): if "'" in s or '"' in s or "," in str(s): return repr(s) return s
We only need to quote a value that might have commas or quotes.
Answered by: Edward275 | Posted: 02-11-2021
>>> x= ['a', 'one "two" three', 'foo, bar', 'both"\''] >>> print ", ".join( map(quote,x) ) a, 'one "two" three', 'foo, bar', 'both"\''