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

简单的python脚本。输入和输出不匹配,python,list,input,printing,output,Python,List,Input,Printing,Output,简短版本: 输入和输出文件中的行数不相等。我不明白为什么,因为我没有增加或减少任何行,即输入文件有12327行,但输出只有11903行 我似乎找不到我的代码有任何错误。我希望有更多经验的人可以?多谢各位 def thelist(): #FUNCTION 1 original_list = [] for line in infile: newline = float(line) if newline < 0: newl

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

我似乎找不到我的代码有任何错误。我希望有更多经验的人可以?多谢各位

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()
详细版本: 我有一个由3个函数组成的简单python脚本

函数1从.txt文件(infle)中获取数字列表,将所有数字转换为浮点数,并将任何负数更改为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()
def thelist():#函数1
原始列表=[]
对于填充中的线:
换行符=浮动(行)
如果换行符<0:
换行符=0
原始列表。追加(换行)
打印('输入文件有',len(原始列表),'行')
对于原始_列表中的元素:
打印(元素,文件=输出文件)
def outfilelinenumber():#函数2
outfile=open('outfile.txt')
改进的_列表=[]
对于输出文件中的行:
改进的_列表。追加(行)
如果没有改进,请列出:
打印('输出文件为空')
其他:
打印('输出文件有',len(改进的列表),'行')
def main():#函数3
列表()
出口编号()
打印('\n','***已完成***')
infle=open('infle.txt')
outfile=open('outfile.txt','w')
main()

一个问题是,您从未关闭输出文件,因此没有向其正确发送任何内容。你需要保管好你的文件:如果你打开它,请正确地关闭它。您也不会关闭输入文件,尽管您看不到由此可能导致的问题

将您的函数替换为

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()
def thelist():#函数1
原始列表=[]
对于填充中的线:
换行符=浮动(行)
如果换行符<0:
换行符=0
原始列表。追加(换行)
打印('输入文件有',len(原始列表),'行')
对于原始_列表中的元素:
打印(元素,文件=输出文件)
infle.close()
outfile.close()

请注意末尾的两个关闭功能。这将解决我的测试中的问题,尽管您在文件处理方面存在其他可能导致问题的问题。我建议您查看以了解更好的文件处理。

一个问题是,您从未关闭输出文件,因此没有向其正确发送任何内容。你需要保管好你的文件:如果你打开它,请正确地关闭它。您也不会关闭输入文件,尽管您看不到由此可能导致的问题

将您的函数替换为

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()
def thelist():#函数1
原始列表=[]
对于填充中的线:
换行符=浮动(行)
如果换行符<0:
换行符=0
原始列表。追加(换行)
打印('输入文件有',len(原始列表),'行')
对于原始_列表中的元素:
打印(元素,文件=输出文件)
infle.close()
outfile.close()

请注意末尾的两个关闭功能。这将解决我的测试中的问题,尽管您在文件处理方面存在其他可能导致问题的问题。我建议您查看以了解更好的文件处理。

我可以看到,在第二个方法读取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 ***

我可以看到,在第二个方法读取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 ***

嗨,罗瑞。谢谢你的帮助。我还在学习python,所以目前进展缓慢。我一定会看一下文件处理教程。谢谢你的帮助。我还在学习python,所以目前进展缓慢。我一定会看一下文件处理教程。我以前没有遇到过.flush()方法,所以我将对它进行研究。谢谢你看我的剧本和建议。嗨,拉马坎特。我以前没有遇到过.flush()方法,所以我将对它进行研究。谢谢你看我的剧本和建议。