【问题标题】:Reversing lines from a file Python 3反转文件中的行 Python 3
【发布时间】:2014-12-30 18:53:10
【问题描述】:

我正在尝试将 Python 3 中文本文件中的行反转并写入输出文件。目前,我遇到了 infile 的最后一行在行尾不包含 \n 的问题。我从这段代码中得到了一个 TypeError 。

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

【问题讨论】:

  • “.reverse”到底是什么?使用 reverse = lines[::-1] 不是更容易吗?文件的最后一行也不需要换行符。
  • .reverse 反转列表。我在一个计算 101 课上,我们还没有学过 [::1],所以我对使用它感到不舒服,因为我们必须能够解释为什么我们的代码有效。在这种情况下,最后一行确实需要一个换行符,因为它稍后将成为第一行。

标签: python file python-3.x reverse


【解决方案1】:

使用您的规范执行此操作的最简单方法 - 假设我理解正确并且实际上您想要做的只是颠倒每一行的顺序 - 就是利用 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'

【讨论】:

  • 我稍后再做,但问题是文件的最后一行没有“\n”,所以当我反转文件时,新的第一行和第二行合并了。跨度>
  • @KiraShelton 好的,我已经对代码进行了修改,以确保在任何给定行中始终只有一个 \n 字符,并且位于末尾。
【解决方案2】:

我最终这样做是为了让它工作......

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)  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-13
    • 2016-01-15
    • 2022-12-03
    相关资源
    最近更新 更多