Python CSVWriter создает файл CSV, который, кажется, не существует в моем каталоге - PullRequest
0 голосов
/ 10 апреля 2019

Я пытаюсь записать в файл CSV, используя Python.Проблема в том, что, похоже, он пишет в какой-то скрытый объект в памяти и никогда не выводит в файл.

Вот код, который я пытался использовать (найдено здесь ):

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

Когда я делаю это, ни один файл фактически не выводится (как показано в моем каталоге Windows), но я также не сталкиваюсь с ошибками.Затем, если я попытаюсь что-то вроде следующего:

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

    for row in csv_reader:
        print(row)

На самом деле выводит то, что я написал ранее (John Smith, Accounting и т. Д.).Похоже, что он записывается в какой-то скрытый файл в памяти.Я нашел этот поток , в котором предлагалось использовать flush() и close() для фактической записи на диск, но ни один из них ничего не делал.

Редактировать: Также проверено os.getcwd() и я нахожусь в правильном каталоге.

Редактировать 2: Также проверил employee_file.closed, и он возвращает False в разделе with open и True после, что кажетсяработать как надо.

Редактировать 3: Еще одна вещь, которую я попробовал, print(os.path.isfile([absolute path])) напечатано True.Похоже, что по какой-то причине этот файл на 100% находится в глазах Python.

Edit 4: Когда я пишу точно такой же код в консоли Python, он отлично работаети выводит файл.К сожалению, у меня слишком много изменений, которые мне нужно сделать, но я не могу этого сделать.

Ответы [ 2 ]

0 голосов
/ 10 апреля 2019

Ну, я нашел обходной путь ... хотя и не очень чистый подход.

Так как я обнаружил, что он отлично экспортируется с помощью консоли Python, я просто включил обработку данных в функцию (котораявозвращает список строк) внутри файла с именем csvautomate.py.Затем я вошел в консоль и выполнил следующее:

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)

И все заработало, как предполагалось, и вывел правильно отформатированный файл с именем output.csv.

Однако это не совсем идеальный вариант.решение, поэтому мне любопытно, если у кого-нибудь есть другие варианты.Кажется, когда я запускаю файлы в cmd, используя py file.py, он не работает как задумано по некоторым причинам.Когда я использую 64-битный Python (я нахожусь на 64-битной Win7), я получаю эту проблему экспорта файла.Когда я использую 32-битный питон, я получаю ошибку «python37.dll отсутствует».

Редактировать: Решена ошибка «python37.dll отсутствует» с 32-битным питоном, выбравновый путь установки (на данный момент я только что создал папку на моем рабочем столе). Похоже, что это была какая-то проблема с разрешениями в предыдущем расположении. Однако это не устранило проблему с отсутствием записи файлов.

0 голосов
/ 10 апреля 2019

Я скопировал / вставил ваш код, и это сработало. Я использую Ubuntu 18.04.2 LTS. После запуска вашего кода файл был сгенерирован, затем я изменил имя файла и выполнил его снова, и он также создал файл.

Кажется, это проблема Windows. Вы проверили каталог через терминал? Может быть, вы сможете увидеть файл таким образом.

...