Команда sed запускается с использованием os.system () или subprocess.call () оставляет файл csv без разделителя

Я запускаю сценарий Python, который берет дамп CSV из базы данных Postgres, а затем я хочу избежать двойных кавычек во всех этих файлах. Поэтому я использую sed для этого.
В моем коде Python:

sed_for_quotes = 'sed -is/\\"//g /home/ubuntu/PTOR/csvdata1/'+table+'.csv' subprocess.call(sed_for_quotes, shell=True) 

Процесс завершается без какой-либо ошибки, но когда я загружаю эти таблицы в Redshift, я получаю сообщение об ошибке. No delimiter found и после проверки CSV я обнаружил, что одна из строк загружена только наполовину, например, если это столбец временной метки, то загружается только половина из них, и после этого в таблице нет данных (в то время как фактический CSV имеет эти данные перед запуском sed ). И это приводит к ошибке определения No delimiter found

Но когда я запускаю sed -is/\"//g filename.csv для этих файлов в оболочке, он отлично работает, а csv после запуска sed имеет все строки. Я проверил, что нет никаких проблем с данными в файлах ,

В чем причина этого не работает в программе Python? Я также пытался использовать sed -i.bak в программе python, но это не имеет никакого значения.

Обратите внимание, что я использую дополнительную обратную косую черту (\) в коде Python, потому что мне нужно избежать другой обратной косой черты.
Другие подходы пытались :

  • Использование subprocess.Popen без размера буфера и с положительным размером буфера, но это не помогло
  • Использование subprocess.Popen(sed_for_quotes,bufsize=-4096) (отрицательный размер буфера) работал для одного из файлов, которые subprocess.Popen(sed_for_quotes,bufsize=-4096) ошибку, но затем столкнулся с той же проблемой в другом файле.

2 Solutions collect form web for “Команда sed запускается с использованием os.system () или subprocess.call () оставляет файл csv без разделителя”

Не используйте промежуточную оболочку, когда вам это не нужно. И проверьте код возврата подпроцесса, чтобы убедиться, что он успешно завершен ( check_call делает это для вас)

 path_to_file = ... # eg '/home/ubuntu/PTOR/csvdata1/' + table + '.csv' subprocess.check_call(['sed', '-i', 's/"//g', path_to_file]) 

Под «промежуточной» оболочкой я подразумеваю, что процесс оболочки выполняется subprocess который анализирует команду (± разбивается на пробелы, но не только) и запускает ее (в этом примере выполняется sed ). Поскольку вы точно знаете, с какими аргументами следует ссылаться, вам не нужно все это, и лучше избегать этого.

Поместите ваш sed в shell script , например

 #!/bin/bash # Parameter $1 = Filename sed -i 's/"//g' "$1" 

Вызовите shell script с помощью subprocess :

 sed_for_quotes = 'my_sed_script /home/ubuntu/PTOR/csvdata1/'+table+'.csv' 

Использовать docs.python.org/3.6: shlex.split
shlex.split (s, comments = False, posix = True)
Разделите строку s, используя shell-подобный синтаксис.

  • Эмулировать браузер для загрузки файла?
  • Как запустить сценарий Python портативно, не указывая его полный путь
  • Создайте суперпользователя django в контейнере докера без ввода пароля
  • Использование os.execvp в Python
  • Вызовите скрипт Python из bash с аргументом
  • Цитировать Цитировать POSIX shell специальные символы на выходе Python
  • Как программно определять приложения по умолчанию в Linux
  • Как установить lxml на OS X Leopard без использования MacPorts или Fink?
  •  
    Interesting Posts for Van-Lav

    Numpy: значение истинности массива с более чем одним элементом неоднозначно

    Как добавить текст в конец строки в строке? – Python

    Интерфейс с удаленными компьютерами с использованием Python

    Python: как определить, является ли атрибут (по имени) атрибутом класса или экземпляра?

    Импортировать SVM-модель в PMML в Java или Python?

    Форма редактирования Django на основе формы добавления?

    Как переместить Sprite в Pygame

    Ближайшие соседи Поиск в Python без kd tree

    Используя 3D-оси Matplotlib, как перетаскивать сразу две оси

    Функция децентрации в QPlainTextEdit вызывает segfault, если задействована последняя строка

    как объединить два кадра данных с разными именами столбцов в пандах? – python

    Пользовательский рамка окна и вид окна с помощью wxPython

    В PySpark 1.5.0, как вы перечисляете все элементы столбца `y` на основе значений столбца` x`?

    В чем разница между файлами pyc и pyo в Python?

    Изменение IP-адреса Python

    Python - лучший язык программирования в мире.