Вы действительно должны заглянуть в модуль csv для более чистого способа сделать это преобразование, я думаю, вам понадобится код, который выглядит примерно так:
fin = csv.reader(open('LogFile.txt', 'rb'), delimiter='\t')
fout = open('newLogFile.csv', 'w')
for row in fin:
fout.write(';'.join(row) + '\n')
Остальныеэтот ответ должен помочь объяснить, почему ваш метод sed не работает и как его исправить.
Попробуйте изменить список команд на следующее:
["sed", "-e", "s/^[ ]*//g", "-e", "s/\([0-9a-zA-Z\.]*\)*/\1;/g", "LogFile.txt"]
Обратите внимание, что второй s/.../.../g
был разбит на две записи в исходном примере, что, вероятно, стало причиной проблемы.Также вам не нужны одинарные кавычки, потому что Popen
сделает все, что необходимо для экранирования, чтобы передать всю запись в списке аргументов в sed
в качестве единственного аргумента.
Вам также следует заменить stderr=f
stderr=subprocess.STDOUT
, который является правильным способом отправки stderr в то же место, что и stdout.
Полный код:
f = open("newlogfile.csv", "w")
args = ["sed", "-e", "s/^[ ]*//g", "-e", "s/\([0-9a-zA-Z\.]*\)*/\1;/g", "LogFile.txt"]
p = subprocess.Popen(args, stdout=f, stderr=subprocess.STDOUT)
f.close()