2014-11-04 7 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]? Также последней строке файла не нужно иметь новый символ строки. –

+0

Реверс отменяет список. Я нахожусь в классе 101 класса, и мы не узнали [:: 1], поэтому мне не комфортно его использовать, потому что мы должны уметь объяснять, почему работает наш код. Последняя строка в этом случае нуждается в новом символе строки, потому что это будет первая строка. –

ответ

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) 

Edit: на основе вашей проблемы с символами новой строки, вот модификация:

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

Я делаю это позже, но проблема в последней строке в файле не имеет «\ n», поэтому, когда я меняю файлы, новая первая строка и вторая строка объединяются. –

+0

@KiraShelton Хорошо, я внес изменения в код, чтобы убедиться, что в любой строке всегда есть только один символ \ n, и это в конце. – furkle

Смежные вопросы