在记事本中打开包含在variab中的Python文件

2024-10-02 16:35:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我到处都找不到这个,如果我错过了,很抱歉。我有一个简单的程序,可以打开一个日志(比如log1.lg)并删除所有不包含关键字的行。然后它将它们抛出到第二个文件中,该文件被重命名为Log1。lg.清洁. 你知道吗

我实现这个的方法是使用操作系统重命名代码如下所示:

#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

如果相关的话,我使用的是python2.7。我不明白为什么这不起作用,为什么它需要一个bufsize。我看到过其他例子,它是这样工作的,所以我想也许这个命令在2.7版中不能像我输入的那样工作?你知道吗

文档展示了如何使用引号中的实际文件名正确地使用它,但是正如您所看到的,我的文件包含在一个似乎会引起问题的变量中。提前谢谢!你知道吗


Tags: 文件inlogsourcenewlineopenword
1条回答
网友
1楼 · 发布于 2024-10-02 16:35:25

请参见这里的Popen构造函数:^{}Popen的第二个参数是bufsize。这就解释了你的错误。还要注意,os.rename不返回任何内容,因此new_log将是None。改用rename变量。你的电话应该是这样的:

subprocess.Popen([prog, rename])

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

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

或者类似的。你知道吗

相关问题 更多 >