-1

I'm trying to write to a CSV file using Python. Problem is - it looks like it's writing to some hidden object in memory and never outputting to a file.

Here's the code I was trying to use (found here):

import csv

with open('employee_file.csv', mode='w') as employee_file:
    employee_writer = csv.writer(employee_file, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)

    employee_writer.writerow(['John Smith', 'Accounting', 'November'])
    employee_writer.writerow(['Erica Meyers', 'IT', 'March'])

When I do this, no file actually gets output (as shown in my Windows directory), but I also face no errors. Then, if I try something like the following:

with open('employee_file.csv') as csv_file:
    csv_reader = csv.reader(csv_file, delimiter=',')

    for row in csv_reader:
        print(row)

It actually outputs what I had written prior (John Smith, Accounting, etc). So it seems like it's being written to some hidden file in memory. I found this thread which suggested using flush() and close() to actually write to disk, but neither of these did anything.

Edit: Also checked os.getcwd() and I am in the correct directory.

Edit 2: Also checked employee_file.closed and it returns False in the with open section and True after, which seems to work as it should.

Edit 3: One more thing I tried, print(os.path.isfile([absolute path])) printed True. So it seems like the file is 100% there in the eyes of Python for some reason.

Edit 4: When I write the exact same code in the python console, it works perfectly fine and outputs a file. Sadly, I have a bit too much modification I need to do that I can't really do this.

ryan.kom
  • 167
  • 1
  • 15
  • `import os; print(os.path.abspath('employee_file.csv'))` – Paul H Apr 10 '19 at 14:17
  • @PaulH Tested this, pointed exactly to the directory I'm working in. `C:\Users\[name]\Desktop\csv-automation\employee_file.csv` yet, nothing is showing up either in the Atom editor or Windows file browser. – ryan.kom Apr 10 '19 at 14:19

2 Answers2

0

I copied/pasted your code and it worked. I'm using Ubuntu 18.04.2 LTS. After running your code, the file was generated, next, I changed the file name and I executed it again and it also created the file.

It seems that is a Windows problem. Did you check the directory through the terminal? Maybe you will be able to see the file this way.

mathias.lantean
  • 541
  • 4
  • 10
  • Hmm.. this is a very strange problem then. I tried `dir` and nothing showed up that isn't already visible in the file explorer. I'm on Windows 7 if that might be relevant to the problem. – ryan.kom Apr 10 '19 at 15:01
0

Well, I found a workaround... though not a very clean approach.

Since I discovered that it was exporting perfectly fine using the Python console, I just enclosed my data processing in a function (which returns a list of rows) inside of a file called csvautomate.py. Then I went into the console and did the following:

import csvautomate

with open("output.csv", mode='w', newline="") as f:
    writer = csv.writer(f, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)

    for row in csvautomate.processdata():
         writer.writerow(row)

And it worked as intended, outputting a correctly formatted file called output.csv.

However this isn't really an ideal solution, so I'm curious if anyone has any other options. Seems when I run files in the cmd using py file.py it doesn't work as intended for some reason. When I use 64-bit python (I'm on Win7 64-bit) I get this file export problem. When I use 32-bit python I get a "python37.dll is missing" error.

Edit: Solved the 'python37.dll is missing" error with 32-bit python by choosing a new install path (just made a folder on my desktop for the time being). Looks like it was probably some kind of permissions issue with the previous location. However, it didn't fix the problem with not writing files.

ryan.kom
  • 167
  • 1
  • 15