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

时间:2017-07-04 16:18:42

标签: python list input printing output

简短版本: 输入和输出文件中的行数不相等。我不明白为什么我不添加或减去任何行,即输入文件有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()

2 个答案:

答案 0 :(得分:2)

一个问题是您从不关闭输出文件,因此没有正确发送任何内容。您需要处理您的文件:如果您打开它,请正确关闭它。您也不会关闭输入文件,但是您没有看到可能导致的问题。

替换你的功能
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以了解更好的文件处理。

答案 1 :(得分:0)

我可以看到,当第二个方法读取outfile时,某些行没有完全推送到outfile.txt,并且发现它为空。这是因为写操作没有完成。正如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 ***