【问题标题】:Cannot remove last part of a list无法删除列表的最后一部分
【发布时间】:2018-07-21 21:05:30
【问题描述】:

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

即如果我有:“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

【问题讨论】:

  • 你为什么不用.replace("{",":")
  • 您正在从正在循环的同一个列表中删除元素,这是错误的

标签: python string list file-handling


【解决方案1】:

我根本不会在单词列表中使用分割线来完成这项任务。我的建议:

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)

【讨论】:

  • 是的,很抱歉,我在编辑时出错了。通常我会使用 .replace() 但我试图在不使用 .replace() 的情况下这样做
  • 无论如何,您不能使用 for 或 while 循环更改列表。此外,如果您从列表中删除一个元素,它会在特定索引处被删除。如果您将一个新元素附加到列表中,它会添加到该列表的末尾,而不是插入到您期望的索引处。但是,在您的情况下,这将按您的预期工作,因为所有这些 '{' 都可能位于列表的末尾。
【解决方案2】:

问题在于实现了拆分方法以将字符串转换为单独的单词。如果其他字符和“{”之间没有空格,它不会分隔“{”。 最好把每个字符分开处理,像下面的sn-p。

string2 = list(string)

它会创造奇迹。 否则,

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

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

【讨论】:

  • 好的,谢谢,我会尝试逐个字符,而不是逐个单词
猜你喜欢
  • 1970-01-01
  • 2013-05-05
  • 2015-01-15
  • 1970-01-01
  • 2010-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-14
相关资源
最近更新 更多