所以,这是我在Python中用来删除行的代码,因此名称为“cleanse”。我列出了几千个单词及其词性:
NN by
PP
PP
......这就是问题所在。无论出于何种原因(一个我无法弄清楚并且已经尝试了几个小时),我用来通过单词输入的程序没有清除重复项,所以我能做的下一个最好的事情是前任的!你知道,循环浏览文件并删除运行中的重复项。但是,每当我这样做时,此代码将取代列表的最后一行并复制 数十万次。
请注意? :(编辑:想法是cleanseArchive()通过一个名为words.txt的文件,获取任何重复的行并删除它们。但是,由于Python无法删除行,并且我没有幸运的任何其他方法,我转向基本上保存列表中的非重复数据(saveList),然后从该列表中写入每个对象进入一个新文件(删除旧文件)。然而,就像我说的那样,它只是重复原始列表的最终对象数千次。
EDIT2:这是我到目前为止所做的,从回复中得出建议:
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:\Python33\Scripts\AI\prototypal_intelligence.py", line 154, in <module>
initialize()
File "C:\Python33\Scripts\AI\prototypal_intelligence.py", line 100, in initialize
cleanseArchive()
File "C:\Python33\Scripts\AI\prototypal_intelligence.py", line 29, in cleanseArchive
f.write(saveList)
TypeError: must be str, not set
答案 0 :(得分:1)
t.first.fil
您基本上会一遍又一遍地打印for i in saveList:
f.write(n+"\n")
的值。
试试这个:
n
答案 1 :(得分:0)
如果您只想删除“重复的行”,我已修改您的阅读代码:
saveList = []
duplicates = []
with open("words.txt", "r") as ins:
for line in ins:
if line not in duplicates:
duplicates.append(line)
saveList.append(line)
另外采取上述纠正措施!
答案 2 :(得分:0)
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有一些颠簸的路,神圣的狗屎。这么多东西不能用于非常模糊的原因!无论如何,修好它。
答案 3 :(得分:0)
让我们清理您在更新中提供给我们的代码:
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)
我们有不好的名字,不尊重Style Guide for Python Code,我们有多余的代码部分,我们没有使用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)
那就是它。