如何使用导入从文件写入另一个文件?
目标是运行模块“printReport”,它读取文件“arrivals_14_16.txt”,并将文件的前四行写入文件“text.txt”。但它只写第一行。如何使用导入从文件写入另一个文件?
在模块“readInput.py”中的函数“headerArrivalsFile”中,如果我离开“print line”,最后该函数打印前四行,但如果我在最后留下“return line”它只返回第一行。
但是,模块“printReport.py”中的“operationReport”函数只在最后如果离开“返回”功能“headerArrivalsFile”,如果我离开“打印”模块“printReport.py”停止加工。
模块:readInput.py
def headerArrivalsFile(file_name):
"""
"""
inFile = open(file_name, "r")
for line in inFile:
if "Arrivals:" in line:
break
return line, ## print line, ## (How do I put this work with -> return line,)
inFile.close()
模块:printReport.py
from readInput import headerArrivalsFile
def operationReport(inputFile, outputFile):
""""
""""
inFile = open(inputFile, "r")
outFile = open(outputFile, "w")
for line in headerArrivalsFile(inputFile):
outFile.write(line)
outFile.close()
inFile.close()
INFILE:arrivals_14_16.txt
Airport: Neverland
Number of belts: 3
Day: 06:11:2014
Period: from 14:00 to 16:00
Arrivals:
KLM75, Amsterdam, 14:35, 60, 50
AF111, Paris, 14:20, 50, 64
LH333, Frankfurt, 14:10, 112, 203
KLM71, Madrid, 14:55, 120, 100
TAP103, Salvador, 15:20, 174, 210
LH123, Berlin, 15:10, 115, 210
不过outFile:test.txt的(我想什么得到)
Airport: Neverland
Number of belts: 3
Day: 06:11:2014
Period: from 14:00 to 16:00
不过outFile:test.txt的(我能得到什么)
Airport: Neverland
的问题出在什么headerArrivalsFile之间的不匹配()做,并且调用代码期望它做的事情。这条线:
for line in headersArrivalFile(inputFile):
告诉Python函数将返回的东西它会遍历(字符串,序列,映射,或发电机)。你的功能(完全如图所示)
def headerArrivalsFile(file_name):
"""
"""
inFile = open(file_name, "r")
for line in inFile:
if "Arrivals:" in line:
break
return line, ## print line, ## (How do I put this work with -> return line,)
inFile.close()
返回无,所以我很惊讶你看到任何输出。返回之前的“休息”会让您直到找到“抵达”线路时关闭。如果你没有找到它,那么你就会退出循环并关闭文件。这两条路线都不返回任何值。
所以需要先解决。你不需要任何的循环,简单地说:
def headerArrivalsFile(file_name):
with open(file_name,"r") as infile:
# Read the entire file, stripping *only* newlines
contents = [l.rstrip('\n') for l in infile]
if "Arrivals:" in contents:
return infile[:infile.index("Arrivals:")]
return contents
注“与”使用自动关闭文件看完后。
我们调用函数
def operationReport(inputFile, outputFile):
""""
""""
inFile = open(inputFile, "r")
outFile = open(outputFile, "w")
for line in headerArrivalsFile(inputFile):
outFile.write(line)
outFile.close()
inFile.close()
您打开headerArrivalsFile()的文件,所以在这里再次打开它没有任何意义。此外,再次使用'with'以确保文件即使在例外情况下也被关闭。
def operationReport(inputFile, outputFile):
with open(outputFile, "w") as outFile:
for line in headerArrivalsFile(inputFile):
outFile.write(line+'\n')
另外请注意我已经加回剥离换行符
“回归”停止功能的执行。无论代码位于何处,它都会停在“返回”处或者没有更多代码执行时,以先到者为准。
将结果放入列表中,然后返回该列表或使用yield代替。
在函数中,将'return'替换为'yield'使其成为发生器。 – 2014-12-04 12:47:22