2013-09-30 185 views
0

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

回答

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") 
+0

這已經完成了!非常感謝。 – user1793317

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