简单的python脚本。输入和输出不匹配

2024-06-11 15:52:47 发布

您现在位置:Python中文网/ 问答频道 /正文

短版本: 输入和输出文件中的行数不相等。我不明白为什么我不加或减任何行,即输入文件有12327行,但输出只有11903行。你知道吗

我似乎找不出我的代码有什么毛病。我希望有更多经验的人可以?非常感谢。你知道吗

详细版本: 我有一个简单的python脚本,由3个函数组成。你知道吗

函数1从一个.txt文件(infile)中获取一个数字列表,将所有数字转换为浮点数,并将所有负数更改为0。然后将它们添加到一个列表(原始列表)。然后,这个列表的每个元素都被打印到一个输出文件中。它还告诉您输入文件中的行数。你知道吗

函数2主要检查输出文件中的行数。你知道吗

函数3只是运行函数1和2。你知道吗

输入文件有12327行,而输出文件只有11903行。你知道吗

我做了另一个输入文件来测试脚本。这个.txt输入文件有10行,其中一些是负数。但是,输出文件是完全空的。你知道吗

我不明白为什么输入和输出的行数不同?我已经包括了下面的代码。你知道吗

如果有任何建议,我将不胜感激。非常感谢。你知道吗

def thelist():  #FUNCTION 1
    original_list = []
    for line in infile:
        newline = float(line)
        if newline < 0:
            newline = 0
        original_list.append(newline)
    print('The input file has', len(original_list), 'lines.')
    for element in original_list:
        print(element, file = outfile)

def outfilelinenumber():    #FUNCTION 2
    outfile = open('outfile.txt')
    improved_list = []
    for line in outfile:
        improved_list.append(line)
    if not improved_list:
        print('Output file is empty.')
    else:
        print('The output file has', len(improved_list), 'lines.')

def main(): #FUNCTION 3
    thelist()
    outfilelinenumber()
    print('\n', '*** Finished ***')


infile = open('infile.txt')
outfile = open('outfile.txt', 'w')

main()

Tags: 文件函数txt列表deflinenewlinefunction
2条回答

我可以看到一些线没有完全推到输出文件.txt当第二个方法读取outfile并发现它为空时。这是因为写入操作没有完成。正如Rory在前面的回答中所建议的,建议在使用后关闭文件,以便正确处理文件。即使使用flush()来完成任何挂起的写操作也会有所帮助。你知道吗

请使用下面的main()获得正确的结果。你知道吗

 def main(): #FUNCTION 3
    thelist()
    infile.flush()
    outfile.flush()
    outfilelinenumber()
    infile.flush()
    outfile.flush()
    print('\n', '*** Finished ***')

使用此方法,输出为:

 The input file has 13 lines.
 The output file has 13 lines.

  *** Finished ***

一个问题是,您从未关闭输出文件,因此没有正确发送到它。你需要照顾你的文件:如果你打开它,关闭它正确。您也不会关闭您的输入文件,尽管您看不到可能由此产生的问题。你知道吗

将函数替换为

def thelist():  #FUNCTION 1
    original_list = []
    for line in infile:
        newline = float(line)
        if newline < 0:
            newline = 0
        original_list.append(newline)
    print('The input file has', len(original_list), 'lines.')
    for element in original_list:
        print(element, file = outfile)
    infile.close()
    outfile.close()

注意结尾的两个关闭函数。这将解决我的测试中的问题,尽管您在文件处理方面确实存在其他可能导致问题的问题。我建议您查看tutorial on file handling以了解更好的文件处理。你知道吗

相关问题 更多 >