如何将python方法文本复制到文本文件

时间:2019-03-05 22:37:57

标签: 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)

1 个答案:

答案 0 :(得分:0)

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

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

  1. 由于您要遍历使用readlines()获得的行,因此它们已经包含换行符。因此,在写入文件时,除非要重复的换行符,否则应仅使用write()而不是writelines()。

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

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

基于Extract functions from python file and write them to other files的另一种可能的解决方案(不确定是否重复,因为这是我的新词,但问题非常相似),

代替读取文件的每一行,您可以读取整个文件,然后使用“ def”关键字进行分割。

  1. 将文件读取为字符串。
  2. 通过“ def”将字符串分割(确保没有“ def”两个单词就不会结束)。
  3. 忽略第一个元素,因为它将是第一个函数定义之前的所有内容,并迭代其余元素。
  4. 将每个字符串(因为它们将是您想要的函数defs)写入一个新文件(您可以使用一个计数器并将其递增以为每个文件产生一个不同的名称)。

按照此步骤操作,您应该实现目标。

如果您需要进一步澄清,请告诉我。