【问题标题】:Printing list to CSV or txt on new lines在新行上将列表打印到 CSV 或 txt
【发布时间】:2018-04-16 11:52:49
【问题描述】:

我正在尝试将从 sql 数据库中获取的一些数据导出到 txt 或 csv 文件。打印语句:

for x in range(len(data)):
        print(data[x]) 

这会输出我想要的,新行中的每个元素

(1, 90, Netherlands, male)
(2,  50, Germany, Female)

等等。现在,当我尝试将其放入文本文件时,它只会将所有内容添加到 1 长行中,所有信息都像常规的 print(data) 命令一样相互粘贴。

我在下面发布了我的代码,以便您了解上下文

sql = 'SELECT * FROM batch'
c.execute(sql)
data = c.fetchall()
list1 = []
addDataToList = list1.append(data)
for x in range(len(data)):
    print(data[x])

    with open('Rapport.txt', mode="w") as output:
    for x in range(len(data)):
        output.write("\n" .join(str(data[x])))

【问题讨论】:

    标签: python sql csv text output


    【解决方案1】:

    每个元素都换行

    那就试试这个

    sql = 'SELECT * FROM batch'
    c.execute(sql)
    data = c.fetchall()
    list1 = []
    addDataToList = list1.append(data)
    # construct output
    outputString = ''
    for x in range(len(data)):
       outputString = outputString + str(data[x]) + '\n'
    # write output to file
    with open('Rapport.txt', mode="w") as output:
       output.write(outputString)
    

    顺便说一句,您正在写入同一个文件x^2 的次数,只有最后一次写入可见,因为您不断覆盖最后一次写入。您应该小心嵌套的 for 语句。请看下面的例子:

    data = ['1', '90', 'Netherlands', 'male']
    result = ''
    for x in range(len(data)):
        print(data[x])
    
        #with open('Rapport.txt', mode="w") as output:
        for x in range(len(data)):
            #output.write("\n" .join(str(data[x])))
            result = result + (data[x] + ' ')
    
    print (str(result))
    

    输出:

    1 90 荷兰男性 1 90 荷兰男性 1 90 荷兰男性 1 90 荷兰男性

    【讨论】:

    • 是的,它只是为了“目前”的状态关系,它意味着覆盖文件并且只有最后一次写入可见!谢谢你的回答!
    • 见我上面的编辑。再想想,我觉得不对。
    • 这是一个有用的编辑!我从你的信息中学到了很多东西!您在 1 或 2 次编辑前发布的代码运行良好!
    • 是的,我看到了这个问题。 open() 函数采用第二个参数定义模式。在您的示例中,您使用的是w,它打开用于写入并擦除任何现有数据。你会想在这里使用a,否则你只会得到最后一行。更好的选择是构建输出字符串,然后只进行一次 write() 调用。
    • 我进行了编辑以创建一个输出字符串,该字符串在for 循环中构造,然后仅写入文件一次。现在我们只写1,而不是你原来的代码x^2
    【解决方案2】:
    sql = 'SELECT * FROM batch'
    c.execute(sql)
    data = c.fetchall()
    list1 = []
    addDataToList = list1.append(data)
    for x in range(len(data)):
        print(data[x])
    
    with open('Rapport.txt', mode="w") as output:
        for x in range(len(data)):
            print(str(data[x]), file=output) 
    

    【讨论】:

      【解决方案3】:

      使用write\n 将内容写入每一行。

      例如:

      with open('Rapport.txt', mode="w") as output:
          for i in data:
              output.write("{0} \n".format(str(i)))
      

      【讨论】:

      • 感谢您的回答!真的很有用!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-14
      • 1970-01-01
      • 2023-01-23
      • 1970-01-01
      • 2013-05-16
      相关资源
      最近更新 更多