函数不返回输出文件

时间:2018-03-27 15:45:39

标签: python python-3.x

我有以下python代码,其目的是从输入文本文件中删除空行。它应该返回一个输出文件,删除所有空行,但它不会。这个错误是什么?谢谢!

import sys

def main():
    inputFileName = sys.argv[1]
    outputFileName = sys.argv[2]

    inputFile = open(inputFileName, "r")
    outputFile = open(inputFileName, "w")

    for line in inputFile:
        if "\n" in line:
            removeBlank = line.replace("\n", "")
            outputFile.write(removeBlank)
        else:
            outputFile.write(line)

    inputFile.close()
    outputFile.close()

main()

2 个答案:

答案 0 :(得分:0)

目前,您的代码在打开后会立即截断其输入文件。充其量这可能会在不同平台上产生不同的结果。在某些平台上,该文件可能为空。我认为打开输入文件进行写作是一个错字。

解决此问题的更好方法是使用生成器。此外,空行的正确测试是line == '\n',而不是'\n' in line,除了最后一行之外,对于所有返回的行都是如此。

def noblanks(file):
    for line in file:
        if line != '\n':
            yield line

您可以这样使用:

with open(inputFileName, "r") as inf, open(outputFilename, 'w') as outf:
    for line in noblanks(inf):
        outf.write(line)

with语句中的上下文管理器将确保您的文件正确关闭,而无需您采取进一步操作。

答案 1 :(得分:0)

您的代码存在很多问题。特别是你用空行检查的条件。人们正确地指出了一些问题。

这是应该工作的解决方案,并生成没有空行的输出文件。

import sys

def main():
    inputFileName = sys.argv[1]
    outputFileName = sys.argv[2]
    with open(inputFileName) as inputFile, open(inputFileName, "w") as outputFile:

        for line in inputFile.readlines():
            if line.strip() != '':
                outputFile.write(line)

if __name__ == '__main__':
    main()