将列表的Python列表转换为字符串

2024-06-20 15:10:19 发布

您现在位置:Python中文网/ 问答频道 /正文

如何将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,正如在类似this的SO问题中看到的,但是它的所有函数似乎都是在一个File对象上操作的。这些列表太小了,使用一个文件是多余的。在

我熟悉join函数,并且有很多这样的答案about it。但它不处理包含逗号的值,也不处理多行,除非我在另一个join中嵌套一个join。在


Tags: csvthein列表stringmatrix逗号join
2条回答

链接到的question中的方法作为join的引用,以及嵌套的joins(这有什么问题?)只要您可以将列表中包含的所有对象转换为字符串,就可以工作:

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)

输出:

^{pr2}$

编辑:

如果对象的字符串表示形式可能包含逗号,则可以通过以下几项操作来实现恢复原始列表列表的输出:

  1. 避开那些逗号,或者
  2. 用引号将所述字符串表示形式包装起来(然后必须转义值中出现的字符)。这正是io.StringIO和{}组合的作用(见丹尼尔的回答)。在

为了实现第一个目标,你可以

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())

相关问题 更多 >