简体   繁体   中英

Printing to a .csv file from a Random List

When I create a random List of numbers like so:

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

then all is well.

But when I attempt to send the output to a file, like so:

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

it is only the last row that is output 10 times. How do I write the entire list to a .csv file ?

In your first example, you're creating a new list for every row. (By the way, you don't need to convert them to str s twice).

In your second example, you print the last list you had created previously. Move the output into the first loop:

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

Tim's answer works well, but I think you are trying to print to terminal and the file in different places.

So with minimal modifications to your code, you can use a new variable 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))

The csv module takes care of a bunch the the crap needed for dealing with csv files. As you can see below, you don't need to worry about conversion to strings or adding line-endings.

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)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM