【问题标题】:Combining a few lines between a string [closed]在字符串之间组合几行[关闭]
【发布时间】:2020-10-29 12:28:13
【问题描述】:

我有几行我喜欢合并。我的输入是那一行..

IsolateID:
ABCDEFG
BCDEQRT
ASFGHKKHH

IsolateID:
XZBFGSJ
KJHHFGG

我在每个块中有不同的行号。我有超过 30,000 个区块。所有块的“IsolateID:”保持不变。但是每个块的行号和包含的行会发生变化。

现在我希望我的输出看起来像这样..

IsolateID:
ABCDEFGBCDEQRTASFGHKKHH

IsolateID:
XZBFGSJKJHHFGG

请帮助我使用 awk、sed 或 python 的任何解决方案。

【问题讨论】:

  • 请编辑您的 Q 以包含您解决问题的最佳尝试。我们在这里帮助您修复代码,而不是为您做。请先阅读Help On-topicHelp How-to-ask,然后再在此处发布更多问题。祝你好运
  • 子标题是否总是IsolateID:,或者它是一行上的值的占位符,后跟:? 'IsolateID:`s 的每个部分之间会有一个空行吗?祝你好运。
  • samplestr="IsolateID: ABCDEFG BCDEQRT ASFGHKKHH IsolateID: XZBFGSJ KJHHFGG" ; sub1=re.sub(r' ([\w]+?)',r'\1',samplestr) ; print(re.sub(r'(\w)(IsolateID:)',r'\1 \2 ',sub1)) - 这是如果您正在执行行操作,如果您正在执行文件操作,那么需要做更多的工作完成
  • 是的,子标题始终是 IsolateID。但我有一个大约 30,000 个块的大文件。

标签: python linux awk sed combine


【解决方案1】:

这符合你的目的吗?

from pathlib import Path
with open(Path("insert_path_here")) as f:
    string = f.read()
#string = "IsolateID:\nABCDEFG\nBCDEQRT\nASFGHKKHH\nIsolateID:\nXZBFGSJ\nKJHHFGG"
formatted = string.replace("\n" , "").split("IsolateID:")
formatted = [i for i in formatted if i]
formatted = [f"IsolateID:\n{i}\n" for i in formatted]
for i in formatted:
    if formatted.index(i) != len(formatted) - 1:
        print(i)
    else:
        print(i[:-1])

输出如下:

IsolateID:
ABCDEFGBCDEQRTASFGHKKHH

IsolateID:
XZBFGSJKJHHFGG

我的文本文件在哪里:

IsolateID:
ABCDEFG
BCDEQRT
ASFGHKKHH

IsolateID:
XZBFGSJ
KJHHFGG

【讨论】:

  • 谢谢。但我有超过 30,000 个不同线条的块。如何为每个案例创建一个字符串来执行上面的代码?
  • 我刚刚测试过它,从文件中读取时它工作得很好。我将编辑我的帖子以包含我的更改,但如果格式与您的问题相似,那么它可以工作。
  • 谢谢。如果您分享如何从文件中读取,这将非常有帮助。我对 python 很陌生。
  • 感谢您的帮助。它奏效了。
猜你喜欢
  • 2021-12-21
  • 2022-01-21
  • 2017-03-20
  • 2023-03-13
  • 2014-02-26
  • 2014-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多