Мои данные исследований не являются обычным файлом. Номер столбца каждой строки может отличаться. Я хочу преобразовать файл "dat" в файл "* .csv", используя Perl, потому что он может работать эффективно (у меня плохой опыт работы с Python). Ниже приведен скрипт, который я запустил. Он отлично работает в Linux, но не выводит контекст в Python сценариях.
new_dat_file="14689_bondlength.prmfrm.dat"
new_csv_file="14689_bondlength.prmfrm.csv"
perl -p -e 's/\\t\s+|\s+/,/g' $new_dat_file |perl -p -e 's/,FRAM/\\nFRAM/g' > $new_csv_file
Выше коды работают в Linux. Я улучшил их в Python скриптах. Если я использую приведенную ниже команду
import os
new_dat_file="14689_bondlength.prmfrm.dat"
new_csv_file="14689_bondlength.prmfrm.csv"
cmd = "perl -p -e 's/\\t\s+|\s+/,/g' " + new_dat_file + " |perl -p -e 's/,FRAM/\\nFRAM/g'
os.system(cmd)
, я могу видеть вывод правильно. Однако, если я изменю значения cmd, как показано ниже, чтобы сохранить вывод в файл csv, но я получил пустой файл.
cmd = "perl -p -e 's/\\t\s+|\s+/,/g' " + new_dat_file + " |perl -p -e 's/,FRAM/\\nFRAM/g' > " + new_csv_file
Как я могу исправить эту проблему? Если я не могу сделать это, есть ли другой альтернативный способ? Любые дальнейшие предложения будут высоко оценены.
Кстати: частичные данные перечислены ниже
FRAM_# 0 0(fs) CN= 1 PRMRYTGT 14689 H 15449 O 1.008
FRAM_# 100 25(fs) CN= 1 PRMRYTGT 14689 H 15449 O 0.955
FRAM_# 200 50(fs) CN= 1 PRMRYTGT 14689 H 15449 O 0.993
FRAM_# 300 75(fs) CN= 1 PRMRYTGT 14689 H 15449 O 0.973
FRAM_# 400 100(fs) CN= 1 PRMRYTGT 14689 H 15449 O 0.988
FRAM_# 500 125(fs) CN= 1 PRMRYTGT 14689 H 15449 O 1.033
FRAM_# 600 150(fs) CN= 1 PRMRYTGT 14689 H 15449 O 1.032
FRAM_# 700 175(fs) CN= 1 PRMRYTGT 14689 H 15449 O 0.986
FRAM_# 800 200(fs) CN= 1 PRMRYTGT 14689 H 15449 O 1.061
FRAM_# 900 225(fs) CN= 1 PRMRYTGT 14689 H 15449 O 1.078
FRAM_# 1000 250(fs) CN= 1 PRMRYTGT 14689 H 15449 O 0.922
FRAM_# 1100 275(fs) CN= 2 PRMRYTGT 14689 H 17402 O 1.257 15449 O 1.430
FRAM_# 303200 75800(fs) CN= 0 PRMRYTGT_BD 14689 H
FRAM_# 921200 230300(fs) CN= 1 PRMRYTGT_BD 14689 H 8375 O 1.062
FRAM_# 1078700 269675(fs) CN= 1 PRMRYTGT_BD 14689 H 12971 O 1.507
FRAM_# 18203400 4550850(fs) CN= 1 PRMRYTGT_BD 14689 H 16172 O 1.507
Я надеюсь получить вывод, как показано ниже:
FRAM_#,0,0(fs),CN=,1,PRMRYTGT,14689,H,15449,O,1.008
FRAM_#,100,25(fs),CN=,1,PRMRYTGT,14689,H,15449,O,0.955
FRAM_#,200,50(fs),CN=,1,PRMRYTGT,14689,H,15449,O,0.993
FRAM_#,300,75(fs),CN=,1,PRMRYTGT,14689,H,15449,O,0.973
FRAM_#,400,100(fs),CN=,1,PRMRYTGT,14689,H,15449,O,0.988
FRAM_#,500,125(fs),CN=,1,PRMRYTGT,14689,H,15449,O,1.033
FRAM_#,600,150(fs),CN=,1,PRMRYTGT,14689,H,15449,O,1.032
FRAM_#,700,175(fs),CN=,1,PRMRYTGT,14689,H,15449,O,0.986
FRAM_#,800,200(fs),CN=,1,PRMRYTGT,14689,H,15449,O,1.061
FRAM_#,900,225(fs),CN=,1,PRMRYTGT,14689,H,15449,O,1.078
FRAM_#,1000,250(fs),CN=,1,PRMRYTGT,14689,H,15449,O,0.922
FRAM_#,1100,275(fs),CN=,2,PRMRYTGT,14689,H,17402,O,1.257,15449,O,1.430