Python3:如何在“for”循环中增加字符串值

时间:2018-05-24 11:55:55

标签: string python-3.x increment

我有一个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为数字。我编写了以下代码来打印以下列术语Scaffold2Scaffold8开头的每一行。

 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)存储在自己的变量中,然后打印出来。这显然比手动输入每个数字要快得多。

2 个答案:

答案 0 :(得分:0)

您可以尝试使用正则表达式 。如果这不是您所期望的,请告诉我,我将更改代码。

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

我只是检查你队伍中的第9个位置,即(第8个索引)。如果它是一个数字,我打印线。就像你说的那样,如果你的“ y ”是一个数字,我就会打印出来。我没有增加它。增量工作已由你的for循环完成。

答案 1 :(得分:0)

好吧,好像你想得到的格式如下:

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']}

编辑:tbh我还是不完全明白为什么你需要那个。