首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >搜索特定单词并返回特定行

搜索特定单词并返回特定行
EN

Stack Overflow用户
提问于 2019-02-05 05:03:55
回答 2查看 38关注 0票数 0

我在下面的代码上得到了帮助,但我需要知道如何让它在所有的比赛中完成。

代码语言:javascript
复制
result = []
# 1. Search for the first failed entry:
with open('diskDetails.txt', 'r') as f:
    lines = f.readlines()
    for idx, line in enumerate(lines):
        if ': Failed' in line:
            result = lines[idx-3:idx+25]  # save lines from 'ID' to 'Sub Vendor'
            #break  # only the first match

# 2. Filter result:
keywords = ('ID', 'State', 'Capacity', 'Product ID', 'Serial No.')
result = list(filter(lambda l: str(l).startswith(keywords), result))

# 3. Save result:
with open('dataFinal.txt', 'wt') as f:
    f.writelines(result)

因此,如果我取消注释的“中断”,它只显示第一个(如前所述)(输出)

代码语言:javascript
复制
ID                              : 0:1:2
State                           : Failed
Capacity                        : 558.38 GB (599550590976 bytes)
Product ID                      : ST3600057SS
Serial No.                      : 6SL7YFWF

如果我注释掉了,它只显示第一个之后的匹配。(产出)

代码语言:javascript
复制
ID                              : 0:1:5
State                           : Failed
Capacity                        : 558.38 GB (599550590976 bytes)
Product ID                      : ST3600057SS
Serial No.                      : 6SLAWWHQ

如何让它返回文件中的所有匹配(上述两个输出)?

diskDetails.txt样品该文件可能包含4-8节,如下所示。我没有包括每个部分的每一行(从ID开始),因为每个部分都有28行长。假设关键字在每个部分中。另外,每个部分都由一个空行分隔(如果这有帮助的话)。

代码语言:javascript
复制
ID                              : 0:1:0
Status                          : Ok
Name                            : Physical Disk 0:1:0
State                           : Online
Power Status                    : Spun Up
Bus Protocol                    : SAS
Media                           : HDD
Part of Cache Pool              : Not Applicable
Remaining Rated Write Endurance : Not Applicable
Failure Predicted               : No
Revision                        : ES66
Driver Version                  : Not Applicable
Model Number                    : Not Applicable
T10 PI Capable                  : No
Certified                       : Yes
Encryption Capable              : No
Encrypted                       : Not Applicable
Progress                        : Not Applicable
Mirror Set ID                   : 0
Capacity                        : 558.38 GB (599550590976 bytes)
Used RAID Disk Space            : 558.38 GB (599550590976 bytes)

ID                              : 0:1:1
Status                          : Ok
Name                            : Physical Disk 0:1:0
State                           : Online
Power Status                    : Spun Up
Bus Protocol                    : SAS
Media                           : HDD
Part of Cache Pool              : Not Applicable
Remaining Rated Write Endurance : Not Applicable
Failure Predicted               : No
Revision                        : ES66
Driver Version                  : Not Applicable
Model Number                    : Not Applicable
T10 PI Capable                  : No
Certified                       : Yes
Encryption Capable              : No
Encrypted                       : Not Applicable
Progress                        : Not Applicable
Mirror Set ID                   : 0
Capacity                        : 558.38 GB (599550590976 bytes)
Used RAID Disk Space            : 558.38 GB (599550590976 bytes)

ID                              : 0:1:2
Status                          : Critical
Name                            : Physical Disk 0:1:2
State                           : Failed
Power Status                    : Spun Up
Bus Protocol                    : SAS
Media                           : HDD
Part of Cache Pool              : Not Applicable
Remaining Rated Write Endurance : Not Applicable
Failure Predicted               : No
Revision                        : ES66
Driver Version                  : Not Applicable
Model Number                    : Not Applicable
T10 PI Capable                  : No
Certified                       : Yes
Encryption Capable              : No
Encrypted                       : Not Applicable
Progress                        : Not Applicable
Mirror Set ID                   : 0
Capacity                        : 558.38 GB (599550590976 bytes)

ID                              : 0:1:3
Status                          : Ok
Name                            : Physical Disk 0:1:3
State                           : Online
Power Status                    : Spun Up
Bus Protocol                    : SAS
Media                           : HDD
Part of Cache Pool              : Not Applicable
Remaining Rated Write Endurance : Not Applicable
Failure Predicted               : No
Revision                        : ES66
Driver Version                  : Not Applicable
Model Number                    : Not Applicable
T10 PI Capable                  : No
Certified                       : Yes
Encryption Capable              : No
Encrypted                       : Not Applicable
Progress                        : Not Applicable
Mirror Set ID                   : 0
Capacity                        : 558.38 GB (599550590976 bytes)
Used RAID Disk Space            : 558.38 GB (599550590976 bytes)

ID                              : 0:1:4
Status                          : Ok
Name                            : Physical Disk 0:1:4
State                           : Online
Power Status                    : Spun Up
Bus Protocol                    : SAS
Media                           : HDD
Part of Cache Pool              : Not Applicable
Remaining Rated Write Endurance : Not Applicable
Failure Predicted               : No
Revision                        : ES64
Driver Version                  : Not Applicable
Model Number                    : Not Applicable
T10 PI Capable                  : No
Certified                       : Yes
Encryption Capable              : No
Encrypted                       : Not Applicable
Progress                        : Not Applicable
Mirror Set ID                   : 0
Capacity                        : 558.38 GB (599550590976 bytes)
Used RAID Disk Space            : 558.38 GB (599550590976 bytes)

ID                              : 0:1:5
Status                          : Non-Critical
Name                            : Physical Disk 0:1:5
State                           : Failed
Power Status                    : Spun Up
Bus Protocol                    : SAS
Media                           : HDD
Part of Cache Pool              : Not Applicable
Remaining Rated Write Endurance : Not Applicable
Failure Predicted               : Yes
Revision                        : ES66
Driver Version                  : Not Applicable
Model Number                    : Not Applicable
T10 PI Capable                  : No
Certified                       : Yes
Encryption Capable              : No
Encrypted                       : Not Applicable
Progress                        : Not Applicable
Mirror Set ID                   : Not Applicable
Capacity                        : 558.38 GB (599550590976 bytes)
Used RAID Disk Space            : 558.38 GB (599550590976 bytes)

ID                              : 0:1:6
Status                          : Ok
Name                            : Physical Disk 0:1:6
State                           : Online
Power Status                    : Spun Up
Bus Protocol                    : SAS
Media                           : HDD
Part of Cache Pool              : Not Applicable
Remaining Rated Write Endurance : Not Applicable
Failure Predicted               : No
Revision                        : ES66
Driver Version                  : Not Applicable
Model Number                    : Not Applicable
T10 PI Capable                  : No
Certified                       : Yes
Encryption Capable              : No
Encrypted                       : Not Applicable
Progress                        : Not Applicable
Mirror Set ID                   : 0
Capacity                        : 558.38 GB (599550590976 bytes)
Used RAID Disk Space            : 558.38 GB (599550590976 bytes)

如何输出和保存仅包含“失败”和只包含包含每个节的关键字的行的部分?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-05 05:36:36

更改1:将结果追加到列表中。在你重新分配每个循环之前

代码语言:javascript
复制
if ': Failed' in line:
    result.append(lines[idx-3:idx+25])

更改2:更新筛选逻辑以循环结果,因为它现在是列表列表

代码语言:javascript
复制
results = list(filter(lambda l: str(l).startswith(keywords), r) for r in result)

更改#3:循环结果并写入文件

代码语言:javascript
复制
with open('dataFinal.txt', 'wt') as f:
    for result in results:
        f.writelines(result)

希望这能有所帮助!

票数 2
EN

Stack Overflow用户

发布于 2019-02-05 05:39:02

您创建了一个空列表,其行为"result = []",这很好。

您将重新定义列表“结果”,每一次都使用以下行遍历for-循环: result = linesidx-3:idx+25

您希望在for-循环中添加类似于: result.append(linesidx-3:idx+25)的列表“结果”。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54527945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档