首页 > 解决方案 > 如何将python方法文本复制到文本文件

问题描述

我想提取类的每个方法并将其写入文本文件。该方法可以由任意长度的行组成,输入文件可以包含任意数量的方法。我想运行一个循环,当它遇到第一个def关键字时开始将行复制到输出文件并继续直到第二个def。然后它将继续,直到所有方法都被复制到单个文件中。

输入:

class Myclass:
    def one():
        pass

    def two(x, y):
        return x+y

输出文件 1:

def one():
    pass

输出文件 2:

def two(x, y):
    return x+y

代码:

with open('myfile.py', 'r') as f1:
    lines = f1.readlines()
    for line in lines:
        if line.startswith('def'):  # or if 'def' in line
            file = open('output.txt', 'w')
            file.writelines(line)
        else:
            file.writelines(line)

标签: python

解决方案


目前还不清楚您的问题到底是什么,或者您到目前为止积极尝试了什么。

查看您提供的代码,有几点需要指出:

  1. 由于您正在迭代使用 readlines() 获得的行,它们已经包含换行符。因此,在写入文件时,您应该简单地使用 write() 而不是 writelines(),除非您想要重复的换行符。

  2. 如果所需的输出是不同文件上的每个函数,则每次发现“def”时都应创建一个新文件。您可以简单地使用计数器并每次增加它来创建唯一的文件名。

  3. 始终确保您正确处理文件(打开和关闭或使用 with 语句)。在您的代码中,似乎该文件将不再在您的 else 语句中打开。

另一种可能的解决方案,基于从 python 文件中提取函数并将它们写入其他文件(不确定是否重复,因为我是新来的,但非常相似的问题),将是:

您可以读取整个文件,然后用“def”关键字将其拆分,而不是读取文件的每一行。

  1. 将文件读入字符串。
  2. 将字符串按“def”(确保最后不会没有“def”字)拆分成一个列表。
  3. 忽略第一个元素,因为它将是第一个函数定义之前的所有元素,并遍历其余元素。
  4. 将这些字符串中的每一个(因为它们将是您想要的函数 defs)写入一个新文件(您可以使用计数器并递增它以为每个文件生成不同的名称)。

按照这个步骤,你应该实现你的目标。

如果您需要额外的说明,请告诉我。


推荐阅读