通过 class 中的函数反转文本文件的行

Reversing lines of a text file through function in class

我正在尝试制作一个 class,它在构造函数中接收文件名,并具有反转该文件中所有行的功能。

class exampleOne:
    def __init__(self, fileName):
        self.fileName = fileName

    def reverse(self):
        file = open(self.fileName, "w")
        for value in list:
            file.write(value.rstrip() + "\n")
        file.close()

a = exampleOne("textExample.txt")
a.reverse()

Text file:
1.
2.
3.
The output i want in the existing file:
3.
2.
1.

但是当我尝试 运行 这个时,我得到了这个错误: "TypeError: 'type' object is not iterable".. 提前致谢

这条语句:

for value in list:

指的是一个叫做 list 的东西,但是你的程序中没有这个名字的任何东西。如果没有本地定义,list 指的是内置 Python 类型 list,这不是您可以在 for 循环中使用的东西。

通常最好避免重新定义内置 Python 对象的名称,例如 list。在您的情况下,您可以使用 lines 来表示文件中的行列表。

(您还必须添加代码以实际 读取 文件中的行。)

我写了这段代码,我认为这对你有用。如果需要,可以将输出写入文件。

class exampleOne:
    def __init__(self, fileName):
        self.fileName = fileName

    def reverse(self):

        with open('textExample.txt') as f:
            lines = f.readlines()    
        for i in lines:
            words = i.split()
            sentence_rev = " ".join(reversed(words))
            print sentence_rev
        f.close()
a = exampleOne("textExample.txt")
a.reverse()

Example txt file : 
Dummy Words
Dummy Words

Output:
Words Dummy
Words Dummy

感谢大家的帮助,代码现在可以运行了。这是完美运行的最终版本

class exampleOne:
    def __init__(self, filePath):
        self.filePath = filePath

    def reverse(self):
        file = open(self.filePath, "r")
        list = file.readlines()
        file.close()

        list.reverse()

        file = open(self.filePath, "w")
        for value in list:
            file.write(value)
        file.close()

a = exampleOne("textExample.txt")
a.reverse()

您不需要 class;一个函数就可以了。

def reverse_lines_in_file(filepath):
    with open(filepath, 'r') as input_file:
        lines = input_file.readlines()

    lines.reverse()

    # If the new first line, which was the old last line,
    # doesn't end with a newline, add one.
    if not lines[0].endswith('\n'):
        lines[0] += '\n'

    with open(filepath, 'w') as output_file:
        for line in lines:
            output_file.write(line)


reverse_lines_in_file('textExample.txt')

有更好的方法来做到这一点,但由于您似乎是一个新手(这没有错 :)),我认为现在就可以了。

虽然您可能认为这里需要 class,但您不需要。除非您获得了更多您没有告诉我们的代码,否则正确的解决方案是根本不使用 class。 你的 class 包含一个字符串并且其中有一个方法,一个简单的函数没有错。与 class:

相比,它实际上是更好的选择
def reverse_lines(file_path):
    with open(file_path) as infile:
        lines = infile.readlines()
    with open(file_path, 'w') as outfile:
        outfile.writelines(lines[::-1])  # reversed(lines)

如果您的文件没有以换行符结尾 (\n),您将需要手动添加换行符。该函数的最终形式可能如下所示:

def reverse_lines(file_path):
    """
    Takes a path to a file as a parameter `file_path`
    and reverses the order of lines in that file.
    """

    # Read all the lines from the file
    with open(file_path) as infile:
        lines = infile.readlines()

    # Make sure there are more lines than one
    if len(lines) <= 1:
        return

    # If the file doesn't end into a newline character
    if not lines[-1].endswith('\n'):

        # Add it and remove the newline from the first (to be last) line
        lines[-1] += '\n'
        lines[1] = lines[1][:-1]

    # Reverse and output the lines to the file
    with open(file_path, 'w') as outfile:
        outfile.writelines(lines[::-1])