Python CSVWriter is creating a CSV file that doesn't seem to exist in my directory

早过忘川 提交于 2019-12-11 19:16:03

问题


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.


回答1:


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.




回答2:


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.



来源:https://stackoverflow.com/questions/55614537/python-csvwriter-is-creating-a-csv-file-that-doesnt-seem-to-exist-in-my-directo

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!