【发布时间】:2009-11-28 17:19:36
【问题描述】:
我正在用 Python 编写一个应用程序,它将具有许多不同的功能,所以从逻辑上讲,我认为最好将我的脚本分成不同的模块。目前,我的脚本读入一个文本文件,其中包含已转换为标记和拼写的代码。然后,该脚本将代码重构为一个字符串,在原始代码中 cmets 的位置出现空白行。
我在使脚本面向对象时遇到了问题。无论我尝试什么,我似乎都无法让程序以与它只是一个脚本文件相同的方式运行。理想情况下,我想要两个脚本文件,一个包含清理和重建文件的类和函数。第二个脚本将简单地从另一个文件中的类调用该函数,该文件作为命令行参数给出。这是我当前的脚本:
import sys
tokenList = open(sys.argv[1], 'r')
cleanedInput = ''
prevLine = 0
for line in tokenList:
if line.startswith('LINE:'):
lineNo = int(line.split(':', 1)[1].strip())
diff = lineNo - prevLine - 1
if diff == 0:
cleanedInput += '\n'
if diff == 1:
cleanedInput += '\n\n'
else:
cleanedInput += '\n' * diff
prevLine = lineNo
continue
cleanedLine = line.split(':', 1)[1].strip()
cleanedInput += cleanedLine + ' '
print cleanedInput
在遵循下面的 Alex Martelli 建议后,我现在有了以下代码,它提供了与原始代码相同的输出。
def main():
tokenList = open(sys.argv[1], 'r')
cleanedInput = []
prevLine = 0
for line in tokenList:
if line.startswith('LINE:'):
lineNo = int(line.split(':', 1)[1].strip())
diff = lineNo - prevLine - 1
if diff == 0:
cleanedInput.append('\n')
if diff == 1:
cleanedInput.append('\n\n')
else:
cleanedInput.append('\n' * diff)
prevLine = lineNo
continue
cleanedLine = line.split(':', 1)[1].strip()
cleanedInput.append(cleanedLine + ' ')
print cleanedInput
if __name__ == '__main__':
main()
不过,我仍然想将我的代码拆分为多个模块。我的程序中的“已清理文件”将对其执行其他功能,因此自然而然,已清理文件本身应该是一个类?
【问题讨论】:
-
假设你有你想要的对象。你会如何使用它?换句话说,你想要什么语法?
-
在这种情况下,我会认为输入文件是对象。清洁过程是我希望能够对所述对象执行的功能。考虑到这一点,我很想在我的输入文件类中使用 for 循环并使其成为清理功能。