2017-10-18 28 views
0

程序比此更多,但現在這是我遇到的麻煩;我想要2個不同的函數,open_file()打開一個.txt文件,然後是一個控制一切的main()(除open_file外還有其他函數可供控制),但我無法獲取main甚至打開並打印文件中的行。讀取在另一個函數中打開的文件的函數產生錯誤

def open_file(): 
    '''prompt for file name, open file, return file pointer''' 
    filename = input("Input a file name: ") 
    file=open(filename,'r') 
    return file 

def main(): 
    ## open the file 
    open_file() 
    file.readline() 
    for line in file: 
     print(line) 
     #and then do other stuff with it 
main() 

當我運行的main(),它會提示輸入文件名,但是當我進入它,它告訴我,「名‘文件’沒有定義」。我該如何糾正?

+0

您需要了解變量的作用域。通常,您應該將參數傳遞給函數,並返回要在該函數外部使用的數據。或者,您可以使用全局範圍,但通常不建議這樣做。 –

回答

2

open_file()的返回值賦值給一個變量中main()

def main(): 
    ## open the file 
    file = open_file() 
    ## ... 
+0

'file'是Python中的保留字。 – James

+1

詹姆斯基於什麼聲稱? – aaron

+2

@James它是在Python 2中,而不是在Python 3中。它不是一個保留字,真的,但它是一個內置函數的名稱(哪一個應該避免陰影)。 –

1

您可以使用with打開該文件,並在離開with塊時自動關閉。就像這樣:

Python3:

def main(): 
    filename = input("Input a file name: ") 
    # Open the file, process it, and close it after processing. 
    with open(filename) as f: 
     process_file(f) 

def process_file(fp_in): 
    for line in fp_in: 
     print(line, end="") 
     #and then do other stuff with it 

main() 

Python2:

def main(): 
    filename = raw_input("Input a file name: ") 
    # Open the file, process it, and close it after processing. 
    with open(filename) as f: 
     process_file(f) 

def process_file(fp_in): 
    for line in fp_in: 
     print line, 
     #and then do other stuff with it 

main() 
相關問題