我有以下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()
答案 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()