从文件中重复python中的单词

时间:2014-03-26 13:43:31

标签: python if-statement text function

我是python的初学者,所以如果代码看起来很糟糕我会道歉。在赋值中,我必须编写一个包含2个参数的函数。第一个参数,输入读取文件,第二个参数是输出文件。对于输入文件中的每一行,该函数应在输出文件上写入多次出现的单词。

def repeat(fileIn, fileOut):
    fileIn(open(fileIn, 'r')
    fileOut(open(fileOut,'w')
    content = fileIn.read()
    for word in fileIn:
        if word in content:
           outF.write()
    return content

当我执行该函数时,没有任何反应或者它返回了语法错误

1 个答案:

答案 0 :(得分:2)

def repeat(fileIn, fileOut):
    fileIn = open(fileIn, 'r')
    fileOut = open(fileOut,'w')
    content = fileIn.read()
    for word in content.split(' '):
        if content.count(word) > 1:
           fileOut.write()
    return content

你的问题是

你没有在=fileIn之间使用open,我不知道你为什么不这样做.. typ-o?
open会返回一个文件句柄,您可以对其进行操作,例如read ..要将此句柄放入变量,请使用=,而不是fileIn(open(...))

其次,您没有将content拆分为单词,通过将变量重命名为for word in content:可以更准确地描述for character in content:,因为您所做的是循环每个字符对字符串执行for操作时的字符串。必须使用split将字符串分成如下列表:["this", "was", "once", "a", "string"]

第三,您尝试outF.writeoutF从未定义..您称之为fileOut ..

现在,一些增强和最佳实践

此外,尝试重写它以更好地匹配最佳实践(这是针对这种特殊情况而做的,在这种情况下,您忘记关闭文件,让您使用打开的文件句柄):

def repeat(fileIn, fileOut):
    with open(fileOut, 'w') as fileOut: # Normally, you don't reuse variable names like this..
        with open(fileIn, 'r') as fileIn:
            content = fileIn.read()
        for word in content.split(' '):
            if content.count(word) > 1:
                fileOut.write()
    return content

但请注意,这将为您留下两次写入新输出文件的单词,因为当您循环计算出现的每个单词时,下次碰到单词时,它会再次写入,而您已经计算过它

考虑到这个字符串:“我拿了一些需要做的事情”,首先你找到了 ,然后把它写到输出文件中。 。接着又来了,你又把它写到了输出文件中。为此,您需要以某种方式存储“已知单词”,这样做的简单方法是:

def repeat(fileIn, fileOut):
    knownWords = []
    with open(fileOut, 'w') as fileOut: # Normally, you don't reuse variable names like this..
        with open(fileIn, 'r') as fileIn:
            content = fileIn.read()
        for word in content.split(' '):
            if not word.lower() in knownWords and content.count(word) > 1:
                fileOut.write()
                knownWords.append(word.lower())
    return content

或者您可以将输出延迟到新文件,这在某些需要“实时”写入新文件的scnearios中可能会有风险,有点像流...但在这种情况下我不会看到有什么害处:

def repeat(fileIn, fileOut):
    outputData = ''

    with open(fileIn, 'r') as fileIn:
        content = fileIn.read()

    for word in content.split(' '):
        if not word in outputData and content.count(word) > 1:
            outputData += word + ' '

    with open(fileOut, 'w') as fileOut:
        fileOut.write(outputData[:-1])

    return content