我想知道以下示例中的for row in purge_list:
是否正常,可以使用列表推导转换为一行:
fnam = "purge_list.csv"
fH = open(fnam, 'w+')
out_str = ""
for row in purge_list:
for str_element in row:
out_str = str(str_element) + "," + out_str
out_str = out_str + "\n"
fH.write(out_str)
out_str = ""
fH.close()
我的目标是获取列表中返回的结果,并将其写为逗号分隔的字符串。
感谢。
这就是数据的样子:
Device ID Last Read PremiseID
80622121 2011-12-05 23:00:00 304096000
80630175 2012-04-25 23:09:46 315080000
80623426 2012-04-25 23:00:00 601012500
80622084 2012-07-31 23:00:00 604013000
80581425 2012-07-31 23:00:00 604034000
我很欣赏对这个答案,评论和答案的关注。
答案 0 :(得分:2)
响应您的编辑 - 这是一种易于处理的方式:
FH.writelines([','.join(str(x) for x in reversed(row)) for row in purge_list])
但它仍然很难阅读。我只想使用join
和reversed
摆脱内循环。
答案 1 :(得分:1)
是的:
>>> purge_list = [ ["a","b"], ["c","d"] ]
>>> ",".join( reversed( [ str(element) for row in purge_list for element in row ]) )
'd,c,b,a'
注意:
join()
方法将该字符串作为传递给它的列表中每个元素之间的分隔符答案 2 :(得分:1)
csv='\n'.join([','.join(map(str,row)) for row in purge_list])
当然你可以用另一个字符串理解来替换地图,但我认为地图更简单。
编辑: 我错过了代码中的反转行。所以,F.J的回答是正确的。
再次编辑: 要获得一个尾随的新行(最后一行之后的新行),请使用代码:
csv=['%s\n' % line for line in [','.join(map(str,row)) for row in purge_list]]
以下是使用with
声明代码的等效代码:
with open(fnam, 'w+') as file:
file.writelines('%s\n' % line for line in [','.join(map(str,row)) for row in purge_list])
答案 3 :(得分:1)
我认为以下应该做你想做的事情,如果不是你想要的结果,请提供一些示例输入和预期输出:
out_str = '\n'.join(','.join(map(str, reversed(row))) for row in purge_list)
您的代码似乎按顺序打印每一行,但每行中的元素都是相反的并用逗号连接,这就是我的代码应该做的。
你的代码做的另一件事(我认为这是无意的)是打印副本的一些行。
','.join(map(str, reversed(row)))
相当于你的内部for循环(除了你的内容包括一个尾随的逗号),通过将它放在for row in purge_list
生成器中我们可以得到每行的正确输出,然后'\n'.join
用于从所有行创建一个大字符串。您可能还需要一个尾随换行符,您可以将+ '\n'
添加到我的单行的最后一行。
修改:如果您不想撤消任何内容,只需从上方移除reversed()
来电。