![](/img/trans.png)
[英]How do i use function call properly. I am gonna do 2 batch python script. The one is in input the other one is output
[英]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.