Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法删除列表的最后一部分_Python_String_List_File Handling - Fatal编程技术网

Python 无法删除列表的最后一部分

Python 无法删除列表的最后一部分,python,string,list,file-handling,Python,String,List,File Handling,我想写一个程序。这个程序读取一个从文件中获取的字符串,将它们分开,删除任何“{”,并用冒号替换它(我现在正尝试这样做)。如果一行上有一个“}”,则该行将被完全删除。然后将新行放入另一个文件中 i、 e.如果我有:“Def StackExchange{” 程序应返回“Def StackExchange:” 为了解决这个问题,我尝试用空格分割字符串,并将其放入一个列表中。之后,我循环遍历字符串并删除任何“{”,并在列表中附加一个“:” 问题是,当我试图删除“{”或添加“:”时,我得到一个ValueE

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

i、 e.如果我有:“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

问题在于使用split方法将字符串转换为单独的单词。如果其他字符和{之间没有空格,则不会将{分隔开。 最好将每个字符分开并进行处理,如下面的代码段所示

string2 = list(string)
它将创造奇迹。 否则,


它将撕开每个字符并将其存储在数组中。现在您的条件将起作用。

问题在于实现了将字符串转换为单独的单词的拆分方法。如果其他字符和“{”之间没有空格,它将不会分隔“{”。 最好将每个字符分开并进行处理,如下面的代码段所示

string2 = list(string)
它将创造奇迹。 否则,


它将撕开每个字符并将其存储在数组中。现在您的条件将起作用。

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

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 suggestion,您可以直接替换该循环中的花括号:

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

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

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 suggestion,您可以直接替换该循环中的花括号:

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

为什么不使用
.replace(“{”,“:”)
?您正在从循环的同一列表中删除元素,这是错误的为什么不使用
.replace(“{”,“:”)
?您正在从循环的同一列表中删除元素,这是错误的是的,很抱歉,我在编辑时出错了。通常我会使用.replace()但是我尝试在不使用.replace()的情况下执行此操作无论如何,您不能使用for或while循环更改列表。此外,如果您从列表中删除元素,它将在特定索引中删除。如果您将新元素附加到列表中,它将添加到该列表的末尾,而不是插入到您期望的索引中。但是,在您的情况下,这将按照您的预期工作,因为所有这些{'可能位于列表的末尾。是的,很抱歉,我在编辑时出错了。通常我会使用.replace(),但我尝试在不使用.replace()的情况下执行此操作无论如何,您不能使用for或while循环更改列表。此外,如果您从列表中删除元素,它将在特定索引中删除。如果您将新元素附加到列表中,它将添加到该列表的末尾,而不是插入到您期望的索引中。但是,在您的情况下,这将按照您的预期工作,因为所有这些{'可能在列表的末尾。好的,谢谢。我会一个字符一个字符地做,而不是一个字一个字地做。好的,谢谢。我会一个字符一个字地做,而不是一个字一个字地做