2014-11-04 15 views
0

我正在嘗試使Python 3中的文本文件中的行反轉並寫入outfile。目前,我在最後一行infile中沒有包含\ n的問題。我從這段代碼中得到一個TypeError。從文件中翻轉行Python 3

def main(): 

    endofprogram = False 
    try: 
     inputfile = input("Enter name of input file: ") 

     ifile = open(inputfile, "r", encoding="utf-8") 

     outputfile = input("Enter name of output file: ") 
     while os.path.isfile(outputfile): 
      if True: 
       outputfile = input("File Exists. Enter name again: ")   
     ofile = open(outputfile, "w")   


    except IOError: 
     print("Error opening file - End of program") 
     endofprogram = True 

    #If there is not exception, start reading the input file 

    if endofprogram == False: 
     newline = "\n" 
     for line in ifile: 
      line = line.strip    
      line = line + "\n"    
      lines = ifile.readlines() 

    lines.reverse() 
    newlines= "".join(lines) 
    print(newlines)  
    ifile.close() 
    ofile.close() 

main() # Call the main to execute the solution 
+0

究竟是什麼「.reverse」?使用reverse = lines [:: - 1]會不會更容易?該文件的最後一行也不需要換行符。 – 2014-11-04 00:28:56

+0

.reverse反轉列表。我在一個計算機101課上,我們還沒有學會[:: 1],所以我不習慣使用它,因爲我們必須能夠解釋爲什麼我們的代碼有效。這種情況下的最後一行確實需要一個新的行字符,因爲它稍後將成爲第一行。 – 2014-11-04 00:34:39

回答

0

最後我這樣做是爲了使工作...

if endofprogram == False:   

    lines = ifile.readlines() 
    linelist = [] 
    for line in lines: 
     line = line.strip("\n") 
     line = line + "\n" 

     linelist.append(line) 


    linelist.reverse() 

    newlines= "".join(linelist) 
    ofile.write(newlines) 
0

您的要求,以最簡單的方式 - 假設我正確理解和字面上所有你想要做的剛好相反每行的順序 - 將只是採取了該reverse方法的優點在Python中列表。因此,對於任何給定的行:

#define line here 
line_list = list(line) 
line_list.reverse() 
reversed_line = ''.join(line_list) 

編輯:基於與換行符您的問題,這裏有一個修改:

#define line here 
line_list = list(line.replace('\n', '')) 
line_list.reverse() 
reversed_line = ''.join(line_list) + '\n' 
+0

我以後會這樣做,但問題是文件的最後一行沒有「\ n」,所以當我反轉文件時,新的第一行和第二行被合併。 – 2014-11-04 00:32:14

+0

@KiraShelton好的,我對代碼進行了修改,以確保任何給定行中總是隻有一個\ n字符,並且它在最後。 – furkle 2014-11-04 00:48:35