【问题标题】:Simple python script. Input and output do not match简单的python脚本。输入输出不匹配
【发布时间】:2017-12-08 04:39:59
【问题描述】:

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

我似乎找不到我的代码有任何问题。我希望有更多经验的人可以吗?谢谢。

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

函数 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()

【问题讨论】:

    标签: python list input printing output


    【解决方案1】:

    一个问题是你永远不会关闭你的输出文件,所以没有任何东西被正确地发送给它。您需要照顾好您的文件:如果您打开它,请正确关闭它。您也不要关闭输入文件,尽管您看不到由此可能导致的问题。

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

    【讨论】:

    • 嗨,罗里。谢谢您的帮助。我还在学习python,所以目前进展缓慢。我一定会看看文件处理教程。
    【解决方案2】:

    当第二种方法读取 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 ***
    

    【讨论】:

    • 嗨,斋月。我以前没有遇到过 .flush() 方法,所以我会玩弄它。感谢您查看我的脚本并提出建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多