0

我找不到这段代码有什么问题。它没有创建新文件,即 FinalResult.txt。

import os

log = open('C:\\Sanity_Automation\\Work_Project\\Output\\Result.doc','r')
log_read=log.readlines()
x="FAIL"
if x in log_read:
    with open('C:\\Sanity_Automation\\Work_Project\\Output\\FinalResult.txt', 'w') as fout:
        fout.write("\n")
        fout.write(x)

还有一件事。当它找到那个单词时,它应该在找到它的地方写下完整的文本行(而不仅仅是“FAIL”)。

4

5 回答 5

3

log_read是一个列表(作为 的结果.readlines)。

如果您进行测试x in log_read,您是在询问列表中的任何项目是否等于FAIL. 换句话说,任何整行

你的意思是以下吗?

for line in log_read:
   if x in line:
      # found it
于 2013-05-09T10:14:14.983 回答
0

它没有创建 FinalResult.txt,因为“log_read”中可能没有“FAIL”。顺便说一句,log_read 是列表。您不是在列表中的每一行中搜索,而是搜索整行,这将(在大多数情况下)失败。

这样做是为了在文件中写入整行,没有太大的变化。

  import os

        log = open('C:\\Sanity_Automation\\Work_Project\\Output\\Result.doc','r')
        log_read=log.readlines()
        x="FAIL"
        for line in log_read:
            if x in line:
                with open('C:\\Sanity_Automation\\Work_Project\\Output\\FinalResult.txt', 'w') as fout:
                    fout.write("\n")
                    fout.write(line)
于 2013-05-09T10:17:59.887 回答
0

那么你已经定义了 X='Fail'。如果你写 x 那么只会写 Fail 。

你应该做

for line in log_read:
    if x in line : fout.write('%s\n'%line)

此外,仅打开一次输出句柄(在循环之前)。或者先获取所有可写行,然后写一次(为了效率)

result = []
for line in log_read:
    if x in line: result.append(line)
if result: fout.write('\n'.join(result))
于 2013-05-09T10:18:36.837 回答
0

log_read是文件中每一行的列表。我认为您想要做的是查看整个文件中是否存在一个单词,而不是该单词是一行。

for line in log_read:
    if x in line:
        with open('C:\\Sanity_Automation\\Work_Project\\Output\\FinalResult.txt', 'w') as fout:
            fout.write('\n')
            fout.write(line) # Writes the line to the file as well
于 2013-05-09T10:14:42.700 回答
0

此外,您正在阅读“.doc”文件,我想这是一个 Microsoft Word 文件。

您应该考虑将其转换为纯文本文件

于 2013-05-09T10:16:16.387 回答