简写:输入和输出文件中的行数不相等。我不明白为什么,因为我没有增加或减少任何行,即输入文件有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()
发布于 2017-07-04 16:28:37
一个问题是,您从未关闭过输出文件,因此没有任何内容正确地发送到它。您需要注意您的文件:如果您打开它,请正确关闭它。您也不会关闭您的输入文件,尽管您看不到由此可能导致的问题。
将函数替换为
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()
注意末尾的两个close函数。在我的测试中,这解决了您的问题,尽管您在文件处理方面确实存在其他可能导致问题的问题。我建议您查看tutorial on file handling以了解更好的文件处理。
发布于 2017-07-04 16:33:43
我可以看到,当第二个方法读取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 ***
https://stackoverflow.com/questions/44910508
复制