Skip to main content
 首页 » 编程设计

python之生成一个python文件

2024年08月12日53dyllove98

我对 python 有疑问(很抱歉我之前的个人感受.. :P)。

我有一个 txt 文件,它包含一种自定义语言,我必须将它翻译成有效的 python 代码。

输入:

import sys   
 
n = int(sys.argv[1]) ;;print "Beginning of the program!" 
 
LOOP i in range(1,n) {print "The number:";;print i} 
 
BRANCH n < 5 {print n ;;print "less than 5"}   

想要的输出看起来完全像这样:

import sys   
 
n = int(sys.argv[1])    
print "Beginning of the program!" 
 
for i in range(1,n) :   
    print "The number:"   
    print i   
 
if n < 5 :   
    print n    
    print "less than 5"     

输入文件的名称是从参数中读取的。输出文件是out.py。如果参数错误,它会给出错误消息。这 ;;表示换行。

当我尝试这样做时,我制作了一个数组,我将所有行读入其中,以“”分隔。然后我想把它从我不需要的标记上去掉。我做了 2 个循环,一个用于台词,一个用于单词。于是我开始更换东西。一切顺利,直到到达 } 标记。它找到它,但不能替换或剥离它。我不知道该怎么做。

我的代码(很乱,我现在没有写入文件):

f = open('test.txt', 'r') 
#g = open('out.py', 'w') 
allWords = map(lambda l: l.split(" "), f.readlines()) 
for i in range(len(allWords)): 
    vanfor = -1 
    vanif = -1 
    for j in range(len(allWords[i])): 
        a=allWords[i][j] 
        a=a.replace(";;","\n") 
        a=a.replace("CIKLUS","for") 
        a=a.replace("ELAGAZAS","if") 
        if a == "for": 
            allWords[i][j+3] = str(allWords[i][j+3])+" :\n" 
        if a == "if": 
            allWords[i][j+3] = str(allWords[i][j+3])+" :\n" 
        zarojel=a.find('}') 
        if zarojel>-1: 
            a=a.rstrip('}') 
        a=a.replace("}","") 
        a=a.replace("{","") 
        if vanfor == -1: 
            vanfor=a.find("for") 
        if vanif == -1: 
            vanif=a.find("if") 
        if (vanfor > -1) or (vanif > -1): 
            a=a.replace("print","   print") 
        if j != (len(allWords[i]))-1: 
            allWords[i][j]=a+" " 
        print allWords[i][j], 

有人可以帮我吗? 提前致谢!

请您参考如下方法:

如果您更改程序的最后:

    # print allWords[i][j], 
    print a, 

输出变成:

import sys   
 
n = int(sys.argv[1])  
print "Beginning of the program!" 
 
for i in range(1,n) : 
   print "The number:" 
   print i 
 
if n < 5 : 
   print n  
   print "less than 5"   

看起来非常接近您想要的。要输出到一个打开的文件对象 g,而不是 stdout,只是程序最后的另一个微小变化......:

    # print allWords[i][j], 
    print>>g, a,