【问题标题】:How to add header to a file using sed command in python如何在python中使用sed命令将标题添加到文件中
【发布时间】:2021-09-29 13:50:03
【问题描述】:

我正在尝试在 python 中使用 sed 命令将以下行添加到文件的开头:

ID|SEC_NO|SEC_CD|SEC_DATE|SEC_ID1|SEC_DESC1|SEC_ID2|SEC_DESC2|SEC_ID3|SEC_DESC3

Command: sed -i '1i ID|SEC_NO|SEC_CD|SEC_DATE|SEC_ID1|SEC_DESC1|SEC_ID2|SEC_DESC2|SEC_ID3|SEC_DESC3' file.csv

上述命令在 bash 中运行良好。但是当我试图从 python 运行相同的命令时,我得到了错误。

cmd =["sed", "-i", "'1i ID|SEC_NO|SEC_CD|SEC_DATE|SEC_ID1|SEC_DESC1|SEC_ID2|SEC_DESC2|SEC_ID3|SEC_DESC3'", "file.csv"]

我收到此错误消息

"sed: -e expression #1, char 1:unkown command: `''\n"

请帮忙

【问题讨论】:

    标签: python linux sed


    【解决方案1】:

    单引号 ('s) 被 shell 解释为将包含的字符序列视为命令的一个参数。当您在 Python 中使用subprocess.run 将命令及其参数作为列表运行时,每个列表项将按原样作为参数传递给命令,因此您不应使用单引号将任何参数括起来:

    cmd = ["sed", "-i", "1i ID|SEC_NO|SEC_CD|SEC_DATE|SEC_ID1|SEC_DESC1|SEC_ID2|SEC_DESC2|SEC_ID3|SEC_DESC3", "file.csv"]
    

    否则单引号本身将成为参数的一部分,在您的情况下由 sed 解释。

    【讨论】:

      【解决方案2】:

      您应该尝试shlex lib 在 python 中拆分您的 bash 命令。

      例如:

      $ cat test.txt
      abc
      
      $ python3
      Python 3.8.10 (default, Jun  2 2021, 10:49:15) 
      [GCC 9.4.0] on linux
      Type "help", "copyright", "credits" or "license" for more information.
      >>> import subprocess, shlex
      >>> subprocess.run(shlex.split("sed -i '1i ID|SEC_NO|SEC_CD|SEC_DATE|SEC_ID1|SEC_DESC1|SEC_ID2|SEC_DESC2|SEC_ID3|SEC_DESC3' test.txt"))
      CompletedProcess(args=['sed', '-i', '1i ID|SEC_NO|SEC_CD|SEC_DATE|SEC_ID1|SEC_DESC1|SEC_ID2|SEC_DESC2|SEC_ID3|SEC_DESC3', 'test.txt'], returncode=0)
      >>> 
      
      $ cat test.txt 
      ID|SEC_NO|SEC_CD|SEC_DATE|SEC_ID1|SEC_DESC1|SEC_ID2|SEC_DESC2|SEC_ID3|SEC_DESC3
      abc
      

      【讨论】:

        猜你喜欢
        • 2019-10-19
        • 1970-01-01
        • 2019-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-04
        • 1970-01-01
        相关资源
        最近更新 更多