2014-04-11 33 views
0

我試圖將該句子翻轉並寫入另一個文件,但是當我運行它時,它會創建一個空的reversed.txt文件。Python:將句子翻轉並寫入另一個文件

下面兩行是在文件輸入:

的Hello World
如何大家都在做什麼?

文件輸出將有行:

dlroW 2009東海生日賀
gniod enoyreve SI窩

我的代碼:

#!/usr/local/bin/python 

name = raw_input("Enter name of file: ") 

def Reverse(name): 

    try: 
     input_file=open(name,"r") 
     reversed = "reversed.txt" 
     output_file=open(reversed,"w") 
     list=input_file.readlines() 
     for i in range(0,len(list)): 
      d = int(len(list) - i) 
      output_file.write(list[d]) 
    except IOError: 
     print("Cannot open file") 
    except: 
     print("Other errors") 
    else: 
     print("success") 
    finally: 
     print("prints always") 
     input_file.close() 
     output_file.close() 
     #returns reversed 

Reverse(name) 

當我運行這一點,打印「其他錯誤」。它創建新文件reversed.txt,但它是空的。

+2

將變量的名稱從'list'更改爲其他名稱。 – devnull

+0

你在'try'塊中有太多的問題,這使得調試非常困難。嘗試將其分爲單獨的函數:導入,處理,導出。 – jonrsharpe

+0

如果你真的捕獲並打印出這個異常,或者甚至可以重新提升它,以便python打印出一個堆棧跟蹤,你將有機會自己調試它。 – SpoonMeiser

回答

2

你的代碼片段有幾個錯誤。但是這應該會更好:

#!/usr/local/bin/python 

name = raw_input("Enter name of file: ") 

def Reverse(name): 
    try: 
     input_file=open(name,"r") 
     reversed = "reversed.txt" 
     output_file=open(reversed,"w") 

     for line in input_file.readlines(): 
       output_file.write(line[-2::-1] + "\n") 
    except IOError: 
     print("Cannot open file") 
    except: 
     print("Other errors") 
    else: 
     print("success") 
    finally: 
     print("prints always") 
     input_file.close() 
     output_file.close() 
     #returns reversed 

Reverse(name) 

這裏我們遍歷讀取的行,然後使用字符串可以被視爲數組來反轉每一行的事實。

編輯 使用line[-2::-1]我們避免具有我們寫文件行的開頭結尾的新行。然後我們追加"\n",這樣每行就可以被新的行字符正確分隔。

+0

我不認爲這個問題是關於保持單詞順序。 – user189

+0

哦!錯過了:)在編輯 –

0

你可以嘗試這樣的事情:

lines=input_file.readlines() 
for line in lines: 
    line = ''.join(list(reversed(line))) 
    output_file.write(line) 
+0

中修復'reversed'是一個生成器;你必須先將它轉換爲字符串。此外,這將把行尾字符放到行的開頭。 –

0

如果我告訴你,什麼是錯的,而不會提高您的實現(這是絕對有可能的;))我想建議的幾件事情:

  1. 縮進是超級重要: 在你的代碼只是def你有一個空行之後。這意味着您的功能在開始之前就結束了,您的功能只是「浮動」。
  2. 您的excepts不是很有幫助:您在捕捉異常時只打印小信息。你不知道爲什麼引發異常。更好的方法是用您自己的自定義消息打印異常。喜歡的東西:
    try: someCode() except IOError as ioE: print "Can't open file! - ", ioE # Change to print() for py3.x except Exception as otherE: print "Unknown error! - ", otherE

  3. 初始化變量要使用:如果您正在使用一個變量,定義它!確保循環/嘗試除外的任何流程將最終初始化您的可變參數。如有疑問,請初始化爲None(使用時請檢查None)。在您的代碼中,input_file正在finally中使用。但是,如果input_file=open(name,"r")引發異常,則input_file將保持未初始化狀態,導致finally中出現另一個異常。

除此之外,您的實施可以從其他答案中得到改進。 希望這有助於!

相關問題