0

当我像这样创建一个随机数字列表时:

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 文件?

4

3 回答 3

0

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

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

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")
于 2013-09-30T05:28:51.507 回答
0

蒂姆的回答效果很好,但我认为您正在尝试打印到终端和不同位置的文件。

因此,只需对您的代码进行最少的修改,您就可以使用一个新变量 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))
于 2013-09-30T05:37:57.317 回答
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)
于 2013-09-30T06:52:13.710 回答