将 Python 列表列表转换为字符串
Convert a Python list of lists to a string
如何最好地将 Python 中的列表列表转换为(例如)逗号分隔值、换行符分隔行、字符串?理想情况下,我可以这样做:
>import csv
>matrix = [["Frodo","Baggins","Hole-in-the-Ground, Shire"],["Sauron", "I forget", "Mordor"]]
> csv_string = csv.generate_string(matrix)
>print(csv_string)
Frodo,Baggins,"Hole-in-the-Ground, Shire"
Sauron,I forget,Mordor
我知道 Python 有一个 csv module, as seen in SO questions like this 但它的所有函数似乎都对 File 对象进行操作。列表足够小,使用文件是多余的。
我熟悉 join function, and there are plenty of SO answers about it。但这不处理包含逗号的值,也不处理多行,除非我将 join
嵌套在另一个 join
.
中
question 你 link 中的方法作为 join
的参考,连同嵌套的 join
s(这有什么问题?)只要您可以将列表列表中包含的所有对象转换为字符串:
list_of_lists = [[1, 'a'], [2, 3, 'b'], ['c', 'd']]
joined = '\n'.join(','.join(map(str, row)) for row in list_of_lists)
print(join)
输出:
1,a
2,3,b
c,d
编辑:
如果您的对象的字符串表示可能包含逗号,您可以执行以下几项操作来获得可以恢复原始列表列表的输出:
- 转义那些逗号,或者
- 将所述字符串表示形式用引号括起来(然后你必须在你的值中转义该字符的出现)。这正是
io.StringIO
和 csv
的组合所做的(参见 Daniel 的回答)。
要达到第一个,你可以做到
import re
def escape_commas(obj):
return re.sub(',', '\,', str(obj))
joined = '\n'.join(','.join(map(escape_commas, row)) for row in list_of_lists)
第二次,
import re
def wrap_in_quotes(obj):
return '"' + re.sub('"', '\"', str(obj)) + '"'
joined = '\n'.join(','.join(map(wrap_in_quotes, row)) for row in list_of_lists)
将 csv 模块与 StringIO
合并:
import io, csv
result = io.StringIO()
writer = csv.writer(result)
writer.writerow([5,6,7])
print(result.getvalue())
如何最好地将 Python 中的列表列表转换为(例如)逗号分隔值、换行符分隔行、字符串?理想情况下,我可以这样做:
>import csv
>matrix = [["Frodo","Baggins","Hole-in-the-Ground, Shire"],["Sauron", "I forget", "Mordor"]]
> csv_string = csv.generate_string(matrix)
>print(csv_string)
Frodo,Baggins,"Hole-in-the-Ground, Shire"
Sauron,I forget,Mordor
我知道 Python 有一个 csv module, as seen in SO questions like this 但它的所有函数似乎都对 File 对象进行操作。列表足够小,使用文件是多余的。
我熟悉 join function, and there are plenty of SO answers about it。但这不处理包含逗号的值,也不处理多行,除非我将 join
嵌套在另一个 join
.
question 你 link 中的方法作为 join
的参考,连同嵌套的 join
s(这有什么问题?)只要您可以将列表列表中包含的所有对象转换为字符串:
list_of_lists = [[1, 'a'], [2, 3, 'b'], ['c', 'd']]
joined = '\n'.join(','.join(map(str, row)) for row in list_of_lists)
print(join)
输出:
1,a
2,3,b
c,d
编辑:
如果您的对象的字符串表示可能包含逗号,您可以执行以下几项操作来获得可以恢复原始列表列表的输出:
- 转义那些逗号,或者
- 将所述字符串表示形式用引号括起来(然后你必须在你的值中转义该字符的出现)。这正是
io.StringIO
和csv
的组合所做的(参见 Daniel 的回答)。
要达到第一个,你可以做到
import re
def escape_commas(obj):
return re.sub(',', '\,', str(obj))
joined = '\n'.join(','.join(map(escape_commas, row)) for row in list_of_lists)
第二次,
import re
def wrap_in_quotes(obj):
return '"' + re.sub('"', '\"', str(obj)) + '"'
joined = '\n'.join(','.join(map(wrap_in_quotes, row)) for row in list_of_lists)
将 csv 模块与 StringIO
合并:
import io, csv
result = io.StringIO()
writer = csv.writer(result)
writer.writerow([5,6,7])
print(result.getvalue())