標題大多是不言自明的。我正在嘗試創建一個程式,該程式根據用戶在 python 中輸入的標題打開一個文本檔案。但是,該程式不列印任何內容——它不需要花費時間來計算和列印文本,而是什么都不做。
我嘗試重新撰寫程式以不包含第一個函式,并簡單地詢問用戶輸入,但隨后我收到有關檔案不在正確目錄中的錯誤提示。我所期望的只是它列印用戶指定的檔案的內容。這是我的代碼:
filename = 0
def get_filename():
filename = str(input("Give a file name: "))
return filename
def process_file():
reading = open(filename, "r", encoding="utf-8")
lines = reading.readlines()
for line in lines:
print(line)
def main():
get_filename()
process_file()
main()
filename.close()
uj5u.com熱心網友回復:
這是最短的方法:
with open(input("Filename: "), "r") as file:
print(file.read())
uj5u.com熱心網友回復:
您的程式打開 file 0,可能是stdin,因此您的程式正在等待輸入。我懷疑你不是那個意思。
您的代碼應該傳遞引數:
def get_filename():
return input("Give a file name: ")
def process_file(filename):
with open(filename, "r", encoding="utf-8") as file:
for line in file:
print(line)
def main():
filename = get_filename()
process_file(filename)
main()
uj5u.com熱心網友回復:
該變數filename在某些函式中是全域的,但在get_filename()函式中是區域的。變數默認是區域的,只有當你在函式中定義之前嘗試使用它們的值時,Python 才會嘗試回退到全域值。要覆寫它并說應該使用全域“檔案名”變數,get_filename可以添加一個帶有global關鍵字的指令作為函式的第一行: global filename.
也就是說,最佳實踐是將值作為引數顯式傳遞給函式,而不是依賴于全域變數:
def get_filename():
filename = input("Give a file name: ")
return filename
def process_file(filename):
reading = open(filename, "r", encoding="utf-8")
lines = reading.readlines()
for line in lines:
print(line)
reading.close()
def main():
filename = get_filename()
process_file(filename)
main()
另外 - 不需要呼叫str回傳值 input:它已經是一個字串。
uj5u.com熱心網友回復:
通過將檔案名作為引數傳遞來呼叫process_file()。get_filename()然后你可以保證檔案名存盤在變數中。您不需要將檔案名宣告為全域。
def get_filename():
filename = str(input("Give a file name: "))
process_file(filename)
def process_file(filename):
reading = open(filename, "r", encoding="utf-8")
lines = reading.readlines()
for line in lines:
print(line)
reading.close()
def main():
get_filename()
main()
uj5u.com熱心網友回復:
您不使用get_filename(). 你必須得到它并將它傳遞給process_file()
def get_filename():
filename = str(input("Give a file name: "))
return filename
def process_file(filename):
reading = open(filename, "r", encoding="utf-8")
lines = reading.readlines()
for line in lines:
print(line)
def main():
filename = get_filename()
process_file(filename)
main()
filename.close()
另一種方法是 - 在函式內部 - 將范圍filename從local(默認)更改為global.
def get_filename():
global filename
filename = str(input("Give a file name: "))
def process_file():
global filename
reading = open(filename, "r", encoding="utf-8")
lines = reading.readlines()
for line in lines:
print(line)
def main():
get_filename()
process_file()
main()
filename.close()
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/530142.html
標籤:Python文件文本
