从随机列表打印到.csv文件

时间:2013-09-30 05:13:38

标签: python csv

当我创建一个随机的数字列表时:

columns = 10
rows = 10
for x in range(rows):
    a_list = []                                                    
    for i in range(columns):                                          
        a_list.append(str(random.randint(1000000,99999999)))     
    values = ",".join(str(i) for i in a_list)
    print values
然后一切都很顺利。

但是当我尝试将输出发送到文件时,如下所示:

sys.stdout = open('random_num.csv', 'w')                  
for i in a_list:
    print ", ".join(map(str, a_list))

它只是输出10次的最后一行。如何将整个列表写入.csv文件?

3 个答案:

答案 0 :(得分:0)

在第一个示例中,您将为每一行创建一个新列表。 (顺便说一下,你不需要将它们转换为str两次)。

在第二个示例中,您将打印先前创建的最后一个列表。将输出移动到第一个循环:

columns = 10
rows = 10
with open("random_num.csv", "w") as outfile:
    for x in range(rows):
        a_list = [random.randint(1000000,99999999) for i in range(columns)]                                                    
        values = ",".join(str(i) for i in a_list)
        print values
        outfile.write(values + "\n")

答案 1 :(得分:0)

Tim的答案很有效,但我认为你正试图在不同的地方打印到终端和文件。

因此,只需对代码进行少量修改,即可使用新变量all_list

import random
import sys

all_list = []
columns = 10
rows = 10
for x in range(rows):
    a_list = []                                                    
    for i in range(columns):                                          
        a_list.append(str(random.randint(1000000,99999999)))     
    values = ",".join(str(i) for i in a_list)
    print values        
    all_list.append(a_list)

sys.stdout = open('random_num.csv', 'w')                  
for a_list in all_list:
    print ", ".join(map(str, a_list))

答案 2 :(得分:0)

csv模块处理了一堆处理csv文件所需的垃圾。 如下所示,您无需担心转换为字符串或添加行结尾。

import csv
columns = 10
rows = 10
with open("random_num.csv", "wb") as outfile:
    writer = csv.writer(outfile)
    for x in range(rows):
        a_list = [random.randint(1000000,99999999) for i in range(columns)]                                                    
        writer.writerow(a_list)