0

I need to output the CSV file text in three files for odds, evens and all numbers. However, Right now it only has them being printed on a single line in an array format when you run the program. I need all the numbers to be on their own individual lines separated by commas.

For example:

1,
2,
3,
4,
5,

I can use loops on all the writerows as seen in the code below however this option crates values separated like

1,

2,

3,

4,

5,

I would like to avoid this and just use .join or the newline, or even something else in order to get the correct output, but I could not get either to work and don't have a ton of experience in formatting csv files.

import csv
from tkinter import *

myGui = Tk()
myGui.title("Label Creator    v: 0.01")
myGui.geometry("290x70")

allArray = []
oddArray = []
evenArray = []

Label(myGui, text="Starting value: ").grid(row=0)
Label(myGui, text="Ending value: ").grid(row=1)

a = IntVar()
b = IntVar()

e1 = Entry(myGui, textvariable=a)
e1.grid(row=0, column=1)
e2 = Entry(myGui, textvariable=b)
e2.grid(row=1, column=1)

def main():
    oute1 = a.get()
    oute2 = b.get()
    for i in range(oute1, oute2 + 1):
        x = i
        allArray.append(x)
        # Odds
        if(x % 2 == 1):
            oddArray.append(x)
        # Evens
        elif(x % 2 == 0):
            evenArray.append(x)

    with open("all_labels", "w") as outputFile1:
        writer1 = csv.writer(outputFile1)
        for k in allArray:
            writer1.writerow([k])

    with open("odd_labels", "w") as outputFile1:
        writer2 = csv.writer(outputFile1)
        for k in oddArray:
            writer2.writerow([k])

    with open("even_labels", "w") as outputFile2:
        writer3 = csv.writer(outputFile2)
        for k in evenArray:
            writer3.writerow([k])


Button(myGui, text="Start", command=main).grid(row=3)

myGui.mainloop()
4
  • 2
    I would love to help but currently this isn't in the form of a question. What exactly is your question? Commented Aug 1, 2017 at 0:05
  • how should I go about formatting the csv file and if there are any ways that I haven't thought of to get the correct format? Commented Aug 1, 2017 at 0:08
  • for k in allArray:? Why not just write allArray directly. Then it will be one row Commented Aug 1, 2017 at 0:59
  • I don't want it all on one line tho @cricket_007 Commented Aug 1, 2017 at 1:04

2 Answers 2

1

If all you want is to force the csv module to print the commas, you can give it a null second column:

    writer1.writerow ([k, None])

Now, if that is really all that you want, I don't think you should be using the csv module to begin with. It would be easier to just write to the file directly:

outputFile1.write ("%d,\n" % k)
Sign up to request clarification or add additional context in comments.

4 Comments

Yeah but the file needs to be compatible with bartender and it won't work unless the formatting is correct
@Joe "bartender"??
yeah it's used for labels
Please paste an example output file. If it is just numbers followed by a single comma, one on each line, I think the code above should work (have you tried it?)
0

I need all the numbers to be on their own individual lines separated by commas.

First, you don't need the csv module for this

Second, I would define a function so that you're not repeating yourself.

def write_numbers(filename, nums):
    with open(filename, "w") as f:
        for x in nums:
            f.write("{},\n".format(x))

Then call that for each of your needed outputs

write_numbers("all_labels.txt", allArray) 
write_numbers("odd_labels.txt", oddArray)  
write_numbers("even_labels.txt", evenArray) 

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.