Python 使用单个字符串写入CSV时,每行返回1个字符
我一直在尝试将数据写入csv文件。我一直在将代码从java转换为python,下面是python代码:Python 使用单个字符串写入CSV时,每行返回1个字符,python,csv,Python,Csv,我一直在尝试将数据写入csv文件。我一直在将代码从java转换为python,下面是python代码: def resultsToCSVStr(results): output = "Episode No.," for run in results: output += "Run" + str(run) + "steps," for time in range(len(results[0]))
def resultsToCSVStr(results):
output = "Episode No.,"
for run in results:
output += "Run" + str(run) + "steps,"
for time in range(len(results[0])):
output += "\n" + str(time) + ","
for run in range(len(results)):
output += "" + str(results[run][time]) + ","
return output
def resultsToCSVFile(results, experimentName):
resultsTable = resultsToCSVStr(results)
#print(resultsTable)
with open("out/" + experimentName + "/" + experimentName + "_stepsToGoal.csv", mode='w') as out:
writer = csv.writer(out, delimiter="\n")
writer.writerows(resultsTable)
预期输出的形式如下:
情节编号,RUN0步骤,RUN1步骤,RUN2步骤,RUN3步骤,RUN4步骤,RUN5步骤,RUN6步骤,RUN7步骤,RUN8步骤,RUN9步骤
0,98100100,97100100
1,14,34,37,40,47,45,29,56,31,31
2,37,30,12,29,29,20,22,31,29,24
3,10,10,16,8,16,10,16,8,10,10
4,16,8,16,8,12,49,8,8,14,14
然而,实际输出是
E
p
我
o
d
e
N
o
,
R
u
n
[
结果的完整性依此类推。当我打印结果表时,它返回正确消除的结果,因此问题在于最后3行。当我从第一个函数中删除“\n”时,它仍然输出相同的结果,因此这甚至不是问题的一部分
非常感谢您的帮助,谢谢
编辑
我改变了:
writer.writerows(resultsTable)
到
它改变了输出,这仍然是同样的问题,但是输出不再有缺口。我认为这真的改变了什么,除了思想id add。尝试使用
csv.writer(out,delimiter=“,”)
而不是od分隔符“\n”。因为分隔符是一行中两个单元格之间的符号。您也根本不需要函数resultsTocsvsstr。只需将resultsTable=resultsTocsvsstr(results)更改为resultsTable=results。但首先,按以下方式对行进行结果分割:
row_len = 3 # Or any row length you want
answer = []
tmp = []
for i, s in enumerate(result[0]):
tmp.append(s)
if (i + 1) % row_len == 0:
answer.append(tmp)
tmp = []
answer.append(tmp)
result = answer
现在我只有能力回来回答这个问题,虽然我的答案对于项目的需求非常具体,但我想我还是会展示出来,以防有人被卡住,需要一个样本:)
你能分享一下
结果
结构应该是什么样子吗?@quantummind我上面已经有了?除非你在谈论打印结果表?CSV编写器负责构建CSV,而不是你。你不应该将CSV字符串传递给writerows
。啊,我明白了,还有其他选择吗,因为我已经有了格式字符串的g,只想将其作为CSVunfortunate上传,它返回相同的输出不需要如此粗鲁。我明白了,我只是担心这会返回一行中的所有内容不?结果只是一个巨大的数字集。一行。@connk好的,你能在resultsToCSVFile funct的开头给出一个可变结果内容的示例吗假设?看起来你首先使用它就像字符串数组,而不是数组数组。实际上,要转换成csv表,它应该有以下结构:[['col1','col2','col3'],[1,2,3],[1,2,3]]
PS。我不是故意粗鲁的
row_len = 3 # Or any row length you want
answer = []
tmp = []
for i, s in enumerate(result[0]):
tmp.append(s)
if (i + 1) % row_len == 0:
answer.append(tmp)
tmp = []
answer.append(tmp)
result = answer
def resultsToCSVFile(results1, experimentName, numRuns, numEpisodes, experimentList):
output = [["" for _ in range(numRuns * len(experimentList) + len(experimentList))] for _ in range(numEpisodes)]
output[0][0] = "Episode No. "
for exp in range(len(experimentList)):
for run in range(numRuns):
output[0][(run + 1 + (exp * (numRuns + 1)))] = 'Run' + str(exp + 1) + "_" + str(run + 1)
for run in range(numRuns + 1):
for episode in range(0, numEpisodes):
if run == 0 and episode > 0:
output[episode][0] = episode
elif episode == 0:
continue
else:
output[episode][run + exp * (numRuns + 1)] = results1[0][
((episode - 1) + numEpisodes * (run - 1) + exp * numRuns * numEpisodes)]
with open("out/" + experimentName + "/" + experimentName + "_stepsToGoal.csv", mode='w', newline='') as out:
writer = csv.writer(out, delimiter=",")
writer.writerows(output)