【问题标题】:Python3: How to increment a string value within a "for" loopPython3:如何在“for”循环中增加字符串值
【发布时间】:2018-05-24 11:55:54
【问题描述】:

我有一个 tabular.text 文件(名为“xfile”)。下面附上其内容示例。

Scaffold2_1 WP_017805071.1  26.71   161 97                    
Scaffold2_1 WP_006995572.1  26.36   129 83       
Scaffold2_1 WP_005723576.1  26.92   130 81   
Scaffold3_1 WP_009894856.1  25.77   245 43  
Scaffold8_1 WP_017805071.1  38.31   248 145   
Scaffold8_1 WP_006995572.1  38.55   249 140    
Scaffold8_1 WP_005723576.1  34.88   258 139   
Scaffold9_1 WP_005645255.1  42.54   446 144

注意每一行如何以Scaffold(y)_1 开头,y 是一个数字。我编写了以下代码来打印以以下术语开头的每一行,Scaffold2 和 Scaffold8。

 with open("xfile", 'r') as data:

 for line in data.readlines():
     if "Scaffold2" in line:
       a = line
       print(a)

     elif "Scaffold8" in line:
       b = line
       print(b)

我想知道,有没有一种方法可以推荐在 if 和 elif 语句中增加 Scaffold() 的 (y) 部分?

这个想法是允许脚本搜索包含“Scaffold(y)”的每一行,并将每一行与一个特定的数字 (y) 存储在它自己的变量中,然后打印。这显然比手动输入每个数字要快得多。

【问题讨论】:

  • 所以不要增加y,如果y是一个数字,你需要打印它,对吧?
  • @Cormac,能否请您粘贴您真正希望获得的o/p。

标签: string python-3.x increment


【解决方案1】:

你可以试试这个,它比使用 Regex容易。如果这不是您所期望的,请告诉我,我会更改代码。

for line in data.readlines():
    if line[0:8] == "Scaffold" and line[8].isdigit():
        print(line)

我只是检查您行中的第 9 个位置,即(第 8 个索引)。如果是数字,我正在打印该行。就像你说的,如果你的“y”是一个数字,我正在打印。我没有增加它。你的 for 循环已经完成了递增的工作。

【讨论】:

    【解决方案2】:

    好的,您似乎想获得以下格式的内容:

    entries = {y1: ['Scaffold(y1)_...', 'Scaffold(y1)_...'], y2: ['Scaffold(y2)_...', 'Scaffold(y2)_...'], ...}

    然后你可以做类似的事情(我假设你所有的行都以你展示的方式开始,所以 y 值总是字符串中的第 8 位):

    entries = dict()
    for line in data.readlines():
        if not line[8] in entries.keys():
            entries.update({line[8]: [line]})
        else:
            entries[line[8]].append(line)
    print(entries)
    

    这样,您将拥有我在上面向您展示的格式的字典 - 输出:

    {'2': ['Scaffold2_1 WP_017805071.1  26.71   161 97', 'Scaffold2_1 WP_006995572.1  26.36   129 83', 'Scaffold2_1 WP_005723576.1  26.92   130 81'], '3': ['Scaffold3_1 WP_009894856.1  25.77   245 43'], '8': ['Scaffold8_1 WP_017805071.1  38.31   248 145', 'Scaffold8_1 WP_006995572.1  38.55   249 140', 'Scaffold8_1 WP_005723576.1  34.88   258 139'], '9': ['Scaffold9_1 WP_005645255.1  42.54   446 144']}
    

    编辑:我仍然不完全理解你为什么需要那个。

    【讨论】:

    • 您建议的格式非常适合我的需要。基本上我需要这种字典的原因是因为我需要绘制表格最后两列中的数字,但是以 "Scaffold3_1" 开头的所有行中的数据点需要与 "Scaffold8_1" 分开绘制。跨度>
    • 另外,我正在尝试使用您附加的代码,但不幸的是,我收到“ValueError: I/O operation on closed file”。试图解决这个问题:)
    • 等等,这是我的一个愚蠢的缩进错误。非常感谢:)
    • 祝你好运,很高兴我能帮上忙。
    猜你喜欢
    • 1970-01-01
    • 2017-05-31
    • 1970-01-01
    • 2021-12-17
    • 2018-02-17
    • 2020-06-01
    • 1970-01-01
    • 2019-05-23
    • 1970-01-01
    相关资源
    最近更新 更多