无法删除列表的最后部分

时间:2018-02-11 16:45:33

标签: python string list file-handling

我正在尝试编写程序。该程序读取从文件中获取的字符串,将它们分开,并删除任何' {'并用冒号替换它(我现在正试图做)。如果有'}'在一条线上,该线完全被移除。然后它将新行放入另一个文件中。

即。如果我有:" Def StackExchange {" 该程序应返回" Def StackExchange:"

我试图通过用空格分割字符串并将其放入列表来解决这个问题。然后我循环遍历字符串并删除任何' {'并在列表中附加":"。

问题在于,当我尝试删除' {'或者添加一个':',我得到一个ValueError,说明' {'尽管列表中有字符,但列表中并不存在。

这是我到目前为止所做的:

        readfile = open(filename + ".bpy","r")
writefile = open(filename + ".py","w")

line = readfile.readline()
string2 = []
while line != "":
    string = line
    string2 = []
    string2.append(string.split())
    if "{" in string2:
        for x in string2:
            try:
                string2.remove("{")
                string2.append(":")
                string = string2.join(" ")
            except:
                pass

    writefile.write(string)
    string2 = []  #This resets string2 and makes it empty so that loop goes on
    line = readfile.readline()


writefile.close()
readfile.close()

编辑:不使用.replace

2 个答案:

答案 0 :(得分:2)

我根本不会在单词列表中使用拆分行来完成此任务。我的建议是:

with open(filename + '.bpy') as readfile, \
        open(filename + '.py', 'w') as writefile:
    for line in readfile:
        if '{' in line:
            line = line.replace('{', ':')
        elif '}' in line:
            continue

        writefile.write(line)

使用@Aswin建议,您可以在该循环中直接替换大括号:

string2 = []
for character in string:
     if character == '{':
          string2.append(':')
     else:
          string2.append(character)
string = ''.join(string2)

答案 1 :(得分:0)

问题在于使用split方法将字符串转换为单独的单词。如果它没有在其他角色之间留出空格,那么它就不会分开{' {'。 最好将每个字符分开并处理它,如下面的代码片段。

string2 = list(string)

它会做奇迹。 否则,

string2 = []
for character in string:
     string2.append(character)

它将翻录每个字符并将其存储在数组中。现在你的病情会奏效。