簡體   English   中英

簡單的python腳本。 輸入和輸出不匹配

[英]Simple python script. Input and output do not match

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

一個問題是您永遠不會關閉輸出文件,因此沒有正確發送任何文件。 您需要照顧好文件:如果打開它,請正確關閉它。 您也不會關閉輸入文件,盡管您看不到由此引起的問題。

替換為

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

請注意最后兩個關閉函數。 盡管您的文件處理確實存在其他問題,但可能會引起問題,因此可以解決我的測試中的問題。 我建議您閱讀有關文件處理教程,以學習更好的文件處理。

我可以看到,當第二種方法讀取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 ***

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM