Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用单个字符串写入CSV时,每行返回1个字符_Python_Csv - Fatal编程技术网

Python 使用单个字符串写入CSV时,每行返回1个字符

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

我一直在尝试将数据写入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])):

        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)