簡體   English   中英

難以在python列表中選擇元素

[英]difficulty in selecting elements in a python list

我一直在嘗試清理txt文件,而我幾乎已經完成了。 我的列表有問題-我無法在###的行中選擇在process_line()創建的列表的元素。

下面是代碼片段;

def process_line(line):
    # receiving a line or string as function
    # argument and replacing '-' 'D00-D09' & 'F00-F09' to '' if it exists
    line = re.sub('D0+\d|F0+\d|-', '', line)
    seq = str(line.split())
    line = re.sub('\'|\\[|\\]|,', '', seq)
    ###  line = (seq[0] + '|' seq[3] + '-' seq[5]) # this is for shorter lines
    print line
    return line  + '\n'

這是刪除一些不需要的數據后的樣本數據集

12asA   1  A    4  A  330 
12asB   1  B    4  B  330 
12caA   1  A    5  A  260 
12e8H   1  H    1  H  113   1  H  114  H  212   H  213  H  214  (2)
12e8L   1  L    1  L  107   1  L  108  L  211   L  212  L  214  (3)   

我希望實現這樣的格式,但是我需要學習如何提取所需的元素-這樣我就可以將數據重新排列為所需的格式:

12asA|4-330
12asB|4-330
12caA|5-260
12e8H|1-113,114-212
12e8l|1-107, 108-211 

而不是得到例如 23reA|1-14,56-65我得到了一些東西[2|1-A]

我不太確定您要在這里做什么,但這似乎與所需的輸出匹配:

import re

data = '''
12asA   1  A    4  A  330  
12asB   1  B    4  B  330 
12caA   1  A    5  A  260 
12e8H   1  H    1  H  113   1  H  114  H  212   H  213  H  214  (2)
12e8L   1  L    1  L  107   1  L  108  L  211   L  212  L  214  (3)
'''
lines = filter(None, data.split('\n')) # filter to remove blank lines

def process_line(line):
    line = re.sub(r'D0\d|F0\d|-', '', line)
    for char in "'[],":
        line = line.replace(char, '')
    seq = line.split()
    if len(seq) == 6:
        return '{}|{}-{}'.format(seq[0], seq[3], seq[5])
    elif len(seq) == 16:
        return '{}|{}-{},{}-{}'.format(seq[0], seq[3], seq[5], seq[8], seq[10])

result = [process_line(line) for line in lines]
for r in result:
    print(r)

輸出:

12asA|4-330
12asB|4-330
12caA|5-260
12e8H|1-113,114-212
12e8L|1-107,108-211

您的代碼中的以下正則表達式:

line = re.sub('\'|\\[|\\]|,', '', seq)

真是一團糟。 我已將其替換為一系列簡單的str.replace調用。 將來,在編寫正則表達式時,請使用原始字符串(例如r'...' )以提高可讀性並幫助您避免錯誤。

如果僅添加該行以消除通過調用str(line.split())引入的括號,逗號和引號(而不是處理原始數據中的垃圾),則應繼續刪除該行中的等效項我發布的代碼,因為它沒有任何用處。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM