Python 如何使用导入从一个文件写入另一个文件?

Python 如何使用导入从一个文件写入另一个文件?,python,string,file,import,Python,String,File,Import,目标是运行模块printReport,该模块读取文件arrivals_14_16.txt,并将文件的前四行写入文件text.txt。但它只写第一行 在模块readInput.py中的函数HeaderArrivals文件中,如果我离开打印行,函数最终会打印前四行,但如果我离开返回行,最后它只返回第一行 但是,只有在我最后将函数headerArrivalsFile与return一起离开时,模块printReport.py中的函数operationReport才能工作,如果我离开print,则模块pr

目标是运行模块printReport,该模块读取文件arrivals_14_16.txt,并将文件的前四行写入文件text.txt。但它只写第一行

在模块readInput.py中的函数HeaderArrivals文件中,如果我离开打印行,函数最终会打印前四行,但如果我离开返回行,最后它只返回第一行

但是,只有在我最后将函数headerArrivalsFile与return一起离开时,模块printReport.py中的函数operationReport才能工作,如果我离开print,则模块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()
infle: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()
返回None,所以我很惊讶您看到任何输出。回程前的“休息”会直接带你到终点,当你找到到达线时。如果找不到它,则退出循环并关闭文件。两个路由都不返回任何值

因此,这需要首先解决。您不需要任何循环,只需:

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
请注意使用“with”在读取文件后自动关闭文件

现在转到调用函数

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')

另外请注意,我已经添加了换行符“return”停止函数的执行。无论它在代码中的什么位置,它都会在“return”或没有更多代码可执行时停止,以先到者为准


将结果放入列表中,然后返回该列表,或者改用yield。

在函数中,将“return”替换为“yield”,使其成为生成器。我将尝试您的代码。关于退货的问题,我的看法是不一致的。应该和if对齐,而不是和breake对齐。好的,这解释了返回一行注释的原因。因此,函数在读取第一行时立即退出。然后,operationReport中的for循环迭代返回行中的字符,并一次写出一个字符。请记住,字符串在某种程度上非常类似于字符列表。实际上,我们刚刚在返回行中发现了一个狡猾的逗号,它使返回值成为一个元组,所以它只需一次点击就写出了这行。