簡體   English   中英

Python:當格式為非標准格式時,如何使for循環將數據附加到列表?

[英]Python: How do I make a for loop append data to a list when the format is non-standard?

我正在尋找使用Python將一些標記數據讀入數據結構。 到目前為止,我已成功將每個Marker名稱讀入一個列表(其中有2,000個)。

我的數據最初是在Excel中,但我將其轉換為.txt文件。

刪除了文件中的標題數據,並使用readline()將其分配給變量。

帶有標記名稱的每一行都以雙引號(“)開頭,因此我能夠輕松獲取該信息並將其存儲為列表。

帶有該標記數據的每一行都縮進了2個空格,並且有些行以“a”,“b”或“h”開頭。 我想把它們變成一個數據結構。 我已經嘗試了兩個列表和字符串,但兩者都返回為空。 每個標記名稱下的數據是具有三個字母“a”,“b”和“h”的塊,每個字母代表一個群體中的個體(有250個)。 棘手的是,有5個字母由單個空格分隔,但是那些5個字母的塊與其他5個字母的塊隔開兩個空格。

例:

"BK_12 (a,h,b) ; 1"
  b a a a b  a b a a a  b a b a a  a a a a a  a a a b b  a a b a h  b   
  a a a a a  a a a a a  a a a a a  a b a a a  a h a a a  a a a a a  h
  a a b a a  a h a a a  a h a h a  a a a a a  a a b a a  a a a a h  a
  a a a b a  a a a a a  a a b a a  b b a b a  h a b a a  a b a a a  h 
  a a a a

那部分我真的不需要幫助,但只是包含參考文件的外觀。 我的最終目標是使用表型數據來尋找與特定表型相關的標志物。

到目前為止,我使用for循環來完成此任務。 我的代碼如下。 編輯:我嘗試從位置2索引,而不是從位置0搜索空白區域。 我認為這會奏效。 else:聲明是為了告訴我它是否正在識別elif語句。 什么都沒有被退回,所以我假設它正在這方面工作,但它沒有附加。

Markers = []
Genotype_Data = []

for line in infile:
    line=line.rstrip()
    if (line[0] == '"'):
        line=line.rstrip()
        Markers.append(line)
    elif (line[2] == 'a'):
        line=line.rstrip()
        Genotype_Data.append(line)
    elif (line[2] == 'b'):
        line=line.rstrip()
        Genotype_Data.append(line)
    elif (line[2] == 'h'):
        line=line.rstrip()
        Genotype_Data.append(line)
    else:
        print("Something isn't right!")

我不明白你的目標是什么。

也許這可以幫助你實現它:

print(line.split()) # just a and b, ...
['b', 'a', 'a', 'a', 'b', 'a', 'b', 'a', 'a', 'a', 'b', 'a', 'b', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'b', 'b', 'a', 'a', 'b', 'a', 'h', 'b']
>>> print(line.split(' ')) # a b, ... and '' where a new block starts
['', '', 'b', 'a', 'a', 'a', 'b', '', 'a', 'b', 'a', 'a', 'a', '', 'b', 'a', 'b', 'a', 'a', '', 'a', 'a', 'a', 'a', 'a', '', 'a', 'a', 'a', 'b', 'b', '', 'a', 'a', 'b', 'a', 'h', '', 'b', '', '', '']
>>> '  x x  '.strip()
'x x'

我仍然不清楚您希望數據在Genotype_Data列表中以什么格式結束,但您應該能夠根據需要調整以下部分:

Markers = []
Genotype_Data = []
INDIVIDUALS = set('abh')

with open('genotype_data.txt', mode='rt') as infile:
    line = infile.next().rstrip()  # read first line of file
    if line[0] == '"':
        Markers.append(line)
    else:
        raise ValueError('marker line expected')

    geno_accumulator = []
    for line in infile:  # read remainder of file
        line = line.rstrip()
        if line[0] == '"':
            Genotype_Data.append(geno_accumulator)
            geno_accumulator = []
            Markers.append(line)
        elif line[2] in INDIVIDUALS:
            geno_accumulator.append(line)
        else:
            raise ValueError('unrecognized line of input data encountered')

    if geno_accumulator:  # append the final bit of genotype data
        Genotype_Data.append(geno_accumulator)

print 'Markers:', Markers
print 'Genotype_Data:', Genotype_Data

暫無
暫無

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

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