[英]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.