Python 输出两次-在发布此问题前30分钟更新问题
这是我的密码Python 输出两次-在发布此问题前30分钟更新问题,python,list,indexing,append,range,Python,List,Indexing,Append,Range,这是我的密码 import re with open('newfiles.txt') as f: k = f.read() p = re.compile(r'[\w\:\-\.\,\']+|[^[\w\:\-\.\'\,]\s]') originaltext = p.findall(k) uniquelist = [] for word in originaltext: if word not in uniquelist:
import re
with open('newfiles.txt') as f:
k = f.read()
p = re.compile(r'[\w\:\-\.\,\']+|[^[\w\:\-\.\'\,]\s]')
originaltext = p.findall(k)
uniquelist = []
for word in originaltext:
if word not in uniquelist:
uniquelist.append(word)
indexes = ' '.join(str(uniquelist.index(word)+1) for word in originaltext)
n = p.findall(indexes)
file = open("newfiletwo.txt","w")
file.write (' '.join(str(e) for e in n))
file.close()
file = open("newfilethree.txt","w")
file.write(' '.join(uniquelist))
file.close()
with open('newfiletwo.txt') as f:
indexess = f.read()
with open('newfilethree.txt') as f:
differentwords = f.read()
differentwords = p.findall(differentwords)
indexess = [uniquelist.index(word) for word in originaltext]
for word in originaltext:
if not word in differentwords:
differentwords.append(word)
i = differentwords.index(word)
indexess.append(i)
s = "" # the reconstructed sentence
for i in indexess:
s = s + differentwords[i] + " "
print(s)
程序基本上获取一个外部文本文件,返回其位置的索引(如果有单词重复,则获取第一个位置),然后将位置保存为外部文件。在执行此操作时,我已拆分文本文件,包括拆分标点符号,并将文件中出现的不同单词和标点符号保存为外部文件。现在,对于困难的部分,使用这两个外部文件-索引和不同的分隔单词,我尝试重新创建原始文本文件,包括标点符号。但出现标题中显示的错误:
Traceback (most recent call last):
File "E:\Python\Index.py", line 31, in <module>
s = s + differentwords[i] + " "
IndexError: list index out of range
回溯(最近一次呼叫最后一次):
文件“E:\Python\Index.py”,第31行,在
s=s+differentwords[i]+“”
索引器:列表索引超出范围
我不想听起来粗鲁,但我是一个初学者,请尽量用一种简单的方式改变,因为我自己创造了这个。你们可能知道一种短得多的方法来实现这一点,但这是我可以处理的简单程度,代码的长度证明了这一点。我曾试图缩短原始文本文件,但证明没有用。有人知道错误发生的原因以及如何修复吗?我现在并不是在寻找效率,也许在再学习几个月之后,但最简单(我不介意太长)的答案将是最好的。对不起,我重复了很多次:-)
“newfiles”-一组带有标点符号的句子
更新
代码不显示错误,但打印原始句子两次。由于删除了第23行上的+1,错误消失。有人知道为什么输出会重复两次吗?问题是,如何限定单词是什么,什么不是。例如,逗号是单词的一部分吗?在您的情况下,它并不是一个分隔符。所以你会得到一个单独的单词逗号,或点,等等。我无法访问您的输入,因此我只能提供示例:
p=re.compile(r'[\w\:\-\.\,]+\124;[^[\ w\:\-\.\,]\s]')
有一点——在本例中,“单词”、“单词”、“单词”、“单词”、“单词”、“单词”都是独立的单词。因为圆点和昏迷是单词的一部分。你不能一边吃蛋糕一边吃。要解决这个问题。。。如果分离前存在空白,则需要存储信息
更新:
哦,是的。双输出。存储在中间的文件是可以的。所以在那之后有一些东西被归档了。请看这两行:
i=不同的两个字索引(word)
追加索引(一)
它们需要在前面的if语句中 这是可疑的:
indexess=[uniquelist.index(word)+1表示原始文本中的单词]
。为什么要添加一个呢?@StevenRumbalski-WOW-thx-man,可能是一个bug,因为我认为python从零开始计数,可能是被搞糊涂了,忘了删除它。这改变了很多结果,但是整个文本文件重复了两次,并且标点符号和单词之间有空格,我猜是从单词中分割出来的。你知道如何解决这两个问题吗?@StevenRumbalski,如果你想知道“newfiles”只是几个带有标点符号的句子,这已经被编辑到question@StevenRumbalskiNvm,谢谢您的尝试:-)谢谢您的解释。但是你知道为什么输出会自动重复吗?它会把同一个东西打印两次。谢谢。它真的很有帮助。在这个问题上已经坚持了很长一段时间了:-)我能问一下,你加入正则表达式在这里做什么吗?比如这个正则表达式和我代码中已有的正则表达式有什么区别?后来我试着自己创建一个,类似于这个,但是我的代码不起作用。你能给我解释一下这个正则表达式是做什么的吗?对于python来说,有一个很好的工具——kiki。在Ubuntu上-sudo-apt-get-install-kiki
。然后,您可以提供示例代码、正则表达式,并直观地测试不同的选项。有了它,请转到python文档重新模块,并尝试不同的选项。我刚刚找到佩奇--如果那样对任何人来说都比较容易的话…我知道已经有一段时间了,但是当你说“有一点——在这种情况下,‘单词’、‘单词’、‘单词’、‘单词’、‘单词’都是独立的单词。因为圆点和昏迷是单词的一部分。你不能一边吃蛋糕一边吃。要解决这个问题。。。如果分离前存在空白,则需要存储信息。”,我该怎么做?