【问题标题】:file of strings, find matching string in another file字符串文件,在另一个文件中找到匹配的字符串
【发布时间】:2018-12-14 23:05:01
【问题描述】:

我有一个文件(文件 A.txt)和一个包含文件 B.txt 的目录。文件 B 位于一个单独的目录中,然后是文件 A。

我想读取文件 B 目录下的所有文本文件,并查找文件 A 以找到文件 B 中匹配的字符串及其下面的文本。

这是文件的小sn-p 文件 A.txt:

**453454

文件B.txt:(一个目录下的一个文件,要搜索那个目录下所有的.txt文件)

**84565
cat   dog       sd
fish  turtle    fg

预期输出:

**84565
cat   dog       sd
fish  turtle    fg

非常感谢!

【问题讨论】:

  • 欢迎来到 StackOverflow。此问题缺少上下文或其他详细信息:请通过提供其他上下文来改进问题,最好包括您对问题的想法以及您为解决问题所做的任何尝试。这些信息可以帮助其他人识别您遇到的困难,并帮助他们写出适合您经验水平的答案。您还需要准确说明问题是什么、您的预期、您得到了什么以及任何追溯。
  • 另外,是否保证文件 B 中的所有“标题行”都以两个星号(星号)开头,而其他行都没有?
  • re.search("\*\*%s\n(.*?)(?=\*\*)"%(84565,),open("file2.txt").read(),re.DOTALL).group(1) ...我猜也许
  • 是的,文件 B 以两颗星开头,其他行都没有。
  • 嗨,@Cindy。您能否分享一下您迄今为止尝试过的事情,以便我们提供更好的建议?

标签: arrays file directory


【解决方案1】:

问题是found 永远不会被设置为False。您拥有的 if 子句仅在读取空行时才会触发。相反,您可以做的是检查每个“数字行”(带有两个星号和一个数字的行)并相应地设置found。 IE。如果“数字行”与“文件 A.txt”中的一个匹配,则将 found 设置为 True,如果没有将其设置为 False。最后一个 for 循环看起来像这样:

for line in file:
    if line.startswith("**"):
        if line.strip() in foxnum:
            found = True
        else:
            found = False
    if found:
        results.write(line)

【讨论】:

  • 您好 BenignBeppe,但我不只想要以星号开头的数字。我也想要它下面的文字,直到下一个星号
  • @Cindy,通过此代码更改,我得到了预期的输出。不是吗?由于子句 if found 在另一个 if 子句之外,这将检查所有行,而不仅仅是以星号开头的行。
猜你喜欢
  • 2020-10-08
  • 2020-03-25
  • 2011-09-25
  • 1970-01-01
  • 1970-01-01
  • 2019-03-21
  • 2023-04-08
  • 2014-02-11
  • 2013-05-16
相关资源
最近更新 更多