1

这是我的输入文件示例(z.txt)

>qrst
ABCDE--  6  6 35 25 10
>qqqq
ABBDE--  7  7 28 29  2

我将字母和数字存储在单独的列表中。这是数字列表的输出 #Output : ['', '6', '', '6', '35', '25', '10'] ['', '7', '', '7 ', '28', '29', '', '2']

由于文件的创建方式,当有单个数字时,输出有一个额外的空间。无论如何要摆脱''(空格)?

4

3 回答 3

1

如果您的输入如下所示:

>>> li=[' 6  6  35  25  10', ' 7 7 28  29 2']

只需使用.split()which 将重复的空格作为单个分隔符处理:

>>> [e.split() for e in li]
[['6', '6', '35', '25', '10'], ['7', '7', '28', '29', '2']]

.split(" ")

>>> [e.split(" ") for e in li]
[['', '6', '', '6', '', '35', '', '25', '', '10'], ['', '7', '7', '28', '', '29', '2']]
于 2016-09-13T04:08:03.240 回答
1

您可以利用filterwith Noneas 功能:

numbers = ['', '7', '', '7', '28', '29', '', '2']
numbers = filter(None, numbers)
print numbers

在此处查看实际操作:https ://eval.in/640707

于 2016-09-13T03:20:37.647 回答
0

我想有很多方法可以做到这一点。我更喜欢使用正则表达式,尽管如果您有一个包含数万行的大型输入文件,这可能会更慢。对于较小的文件,没关系。

几点:

  1. 使用上下文管理器(with语句)打开文件。当with语句结束时,文件将自动关闭。

  2. re.findall()re.match()或的替代方案re.search()。后续代码会略有不同。

  3. org和元素相关,我建议您改为维护一个 3 元素元组列表sequencenumbers当然,您已经缓冲了 org 字段并在获得下一行时添加到元组列表中。

    import re
    
    org = []
    sequence = []
    numbers = []
    
    with open('ddd', 'r') as f:
        for line in f.readlines():
            line = line.strip()
            if re.search(r'^>', line):
                org.append(line)
            else:
                m = re.findall(r'^([A-Z]+--)\s+(.*)\s+', line)
                if m:
                    sequence.append(m[0][0])
                    numbers.append(map(int, m[0][1].split())) # convert from str to int
    
    print(org, sequence, numbers)
    
于 2016-09-13T03:58:53.027 回答