Python - 在记事本中打开包含在变量中的文件

时间:2017-08-31 17:58:35

标签: python python-2.7

我无法在任何地方找到这个,很抱歉,如果我错过了。看起来它应该很简单,但不知何为不是。我有一个简单的程序打开一个日志(log1.lg让我们说)并删除任何不包含关键字的行。然后它将它们扔到第二个文件中,该文件重命名为Log1.lg.clean。

我实现这个的方法是使用os.rename,所以代码如下所示:

#define source and key words
source_log = 'Log1.lg'
bad_words = ['word', 'bad']

#clean up the log
with open(source_log) as orig_log, open('cleanlog.lg', 'w') as cleanlog:

     for line in orig_log:
         if not any9bad_word in line for bad_word in bad_words):
              cleanlog.write(line)

#rename file and open in Notepad
rename = orig_log + '.clean'
new_log = os.rename("cleanlog.lg", rename)
prog = "notepad.exe"
subprocess.Popen(prog, new_log)

错误我得到的是:

File "C:\Users\me\Downloads\PythonStuff\stripMmax.py", line 23, in cleanLog
    subprocess.Popen(prog, new_log)
  File "C:\Python27\lib\subprocess.py", line 339, in __init__
    raise TypeError("bufsize must be an integer")
TypeError: bufsize must be an integer

我使用Python 2.7,如果相关的话。我不知道为什么这不起作用或为什么它需要bufsize。我已经看到了其他这样的例子,所以我想这个命令可能不会像我输入的那样在2.7中工作吗?

文档显示了如何使用引号中的实际文件名正确使用它,但正如您所看到的,我的这里包含一个似乎会导致问题的变量。提前谢谢!

1 个答案:

答案 0 :(得分:0)

请在此处查看Popen构造函数:subprocess.PopenPopen的第二个参数是bufsize。这解释了你的错误。另请注意,os.rename不会返回任何内容,因此new_log将为None。请改用rename变量。你的电话应该是这样的:

subprocess.Popen([prog, rename])

您可能还想等待创建的Popen对象:

proc = subprocess.Popen([prog, rename])
proc.wait()

或类似的东西。