Python:换行问题



所以,这是我在Python中用来删除行的代码,因此得名"clean"

的NN

的PP

的PP

这就是问题所在。无论出于什么原因(我想不通,已经试了几个小时了),我用来检查单词输入的程序没有清除重复项,所以我能做的下一件最好的事情就是前者!你知道,循环浏览文件并在运行时删除重复项。然而,每当我这样做时,这段代码都会占用列表的最后一行,并将复制数十万次。

想一想?:(

编辑:这个想法是cleanseArchive()通过一个名为words.txt的文件,获取任何重复的行并删除它们。不过,由于Python不能删除行,而且我在其他方法上也没有运气,所以我转而将不重复的数据保存在列表中(saveList),然后将该列表中的每个对象写入一个新文件(删除旧文件)。然而,就在我所说的那一刻,它只是将原始列表的最终对象重复了成千上万次。

第二版:这是我到目前为止所得到的,从回复中得到建议:

def cleanseArchive():
    f = open("words.txt", "r+")
    given_line = f.readlines()
    f.seek(0)
    saveList = set(given_line)
    f.close()
    os.remove("words.txt")
    f = open("words.txt", "a")
    f.write(saveList)

但是ATM给了我一个错误:

Traceback (most recent call last):
  File "C:Python33ScriptsAIprototypal_intelligence.py", line 154, in <module>
    initialize()
  File "C:Python33ScriptsAIprototypal_intelligence.py", line 100, in initialize
    cleanseArchive()
  File "C:Python33ScriptsAIprototypal_intelligence.py", line 29, in cleanseArchive
    f.write(saveList)
TypeError: must be str, not set
for i in saveList:
    f.write(n+"n")

您基本上一遍又一遍地打印n的值。

试试这个:

for i in saveList:
    f.write(i+"n")

如果你只想删除"重复的行",我已经修改了你的阅读代码:

saveList = []
duplicates = []
with open("words.txt", "r") as ins:
for line in ins:
    if line not in duplicates:
        duplicates.append(line)
        saveList.append(line)

另外,请进行上述更正!

def cleanseArchive():
f = open("words.txt", "r+")
f.seek(0)
given_line = f.readlines()
saveList = set()
for x,y in enumerate(given_line):
    t=(y)
    saveList.add(t)
f.close()
os.remove("words.txt")
f = open("words.txt", "a")
for i in saveList: f.write(i)

成品!我最终深入研究了枚举,基本上只是用它来获取字符串。伙计,当你进入布景/列表时,Python会有一些崎岖不平的道路,天哪。这么多东西因为非常模糊的原因而不起作用!不管是什么情况,都要解决。

让我们清理一下您在更新中给我们的代码:

def cleanseArchive():
    f = open("words.txt", "r+")
    given_line = f.readlines()
    f.seek(0)
    saveList = set(given_line)
    f.close()
    os.remove("words.txt")
    f = open("words.txt", "a")
    f.write(saveList)

我们有不尊重Python代码风格指南的坏名字,我们有多余的代码部分,我们没有使用Python的全部功能,其中一部分不起作用。

让我们从删除不需要的代码开始,同时使用有意义的名称。

def cleanse_archive():
    infile = open("words.txt", "r")
    given_lines = infile.readlines()
    words = set(given_lines)
    infile.close()
    outfile = open("words.txt", "w")
    outfile.write(words)

不需要seek,打开文件读取的模式现在只是r,写入的模式现在是w,我们放弃了删除文件,因为它无论如何都会被覆盖。看看这个现在更清晰的代码,我们看到,我们错过了在编写后关闭文件的机会。如果我们用with语句打开文件,Python会帮我们处理这个问题

def cleanse_archive():
    with open("words.txt", "r") as infile:
        words = set(infile.readlines())
    with open("words.txt", "w") as outfile:
        outfile.write(words)

现在我们有了清晰的代码,我们将处理调用outfile.write时出现的错误消息:TypeError: must be str, not set。这条消息很明确:您不能将集合直接写入文件。显然,您必须循环浏览集合的内容。

def cleanse_archive():
    with open("words.txt", "r") as infile:
        words = set(infile.readlines())
    with open("words.txt", "w") as outfile:
        for word in words:
            outfile.write(word)

就是这样。

相关内容

  • 没有找到相关文章