首页 > 解决方案 > 生成具有正确输出python的文件?

问题描述

我有一个 python 代码,用于生成批处理文件,输入来自 txt 文件

def create_bat_file(lp=None):
  with open(r"test.txt", "r+") as file:
    currentDir = os.path.abspath(".")
    data = file.readlines()
    for line in data:
      a = line.split('=')
      b = a[0]
      f = a[1]
      bk = a[2]
      reldat = a[3]
      f= open("{}.bat".format(f),"w+")
      f.write("@ECHO OFF\n")
      f.write("SET lp="'"{}"'"\n".format(lp))
      if b == "RB":
          f.write("SET reldat="'"{}"'"".format(reldat))
      if b == "RB":
        f.write("{}\\a.exe POST -d "'"best.variable.lp=lp"'"" " " "{}".format(currentDir,bk))
      else:
        f.write("{}\\a.exe POST -d "'"best.variable.cp=cp"'"" " " "{}".format(currentDir,bk))
      f.close()

test.txt 文件有以下输入

CL=TEST14=https://test.com.org/latst/queue/TEST-R=2020-12-22

下面是输出

@ECHO OFF
SET lp="test"
SET reldate="2020-12-22
"C:\a.exe POST -d "best.variable.cp"=cp https://test.com.org/rest/api/latest/queue/TEST-RR

问题是它创建批处理文件(TEST14.bat)时

Wrong:

SET reldate="2020-12-22
    "C:\a.exe POST -d "best.variable.cp"=cp https://test.com.org/rest/api/latest/queue/TEST-RR 

在输出中,结束双引号出现在下一行,它应该总是像

Correct:

SET reldate="2020-12-22"
C:\a.exe POST -d "best.variable.cp"=cp https://test.com.org/rest/api/latest/queue/TEST-RR

标签: pythonpython-2.7

解决方案


的最后一个字符line是换行符\n。的最后一个字符reldat也是换行符。因此,上线:

f.write("SET reldat="'"{}"'"".format(reldat))

你最终\n在最后一个之前添加了一个"

要修复,您可以删除\nfromline并在需要的地方添加缺少的:

def create_bat_file(lp=None):
  with open(r"test.txt", "r+") as file:
    currentDir = os.path.abspath(".")
    data = file.readlines()
    for line in data:
      line = line[:-1]  #### STRIP NEWLINE CHARACTER ####
      a = line.split('=')
      b = a[0]
      f = a[1]
      bk = a[2]
      reldat = a[3]
      f= open("{}.bat".format(f),"w+")
      f.write("@ECHO OFF\n")
      f.write("SET lp="'"{}"'"\n".format(lp))
      if b == "RB":
          f.write('SET reldat="{}"\n'.format(reldat))  #### ADD MISSING NEWLINE ####
      if b == "RB":
        f.write("{}\\a.exe POST -d "'"best.variable.lp=lp"'"" " " "{}".format(currentDir,bk))
      else:
        f.write("{}\\a.exe POST -d "'"best.variable.cp=cp"'"" " " "{}".format(currentDir,bk))
      f.close()

我还自由地在字符串周围使用单引号,它看起来好多了!


推荐阅读