这是我的输入文件样本(z.txt)
>qrst
ABCDE-- 6 6 35 25 10
>qqqq
ABBDE-- 7 7 28 29 2
我将alpha和numeric存储在单独的列表中。这是数字列表的输出 #Output:['','6','','6','35','25','10'] ['','7','','7','28','29','','2']
由于文件的创建方式,当有一位数时,输出有一个额外的空格。反正有没有摆脱''(空格)?
答案 0 :(得分:1)
您可以利用filter
None
作为其功能:
numbers = ['', '7', '', '7', '28', '29', '', '2']
numbers = filter(None, numbers)
print numbers
在此处查看此行动:https://eval.in/640707
答案 1 :(得分:1)
如果您的输入如下:
>>> 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']]
vs .split(" ")
:
>>> [e.split(" ") for e in li]
[['', '6', '', '6', '', '35', '', '25', '', '10'], ['', '7', '7', '28', '', '29', '2']]
答案 2 :(得分:0)
我想有很多方法可以做到这一点。我更喜欢使用正则表达式,但如果你有一个包含数万行的大型输入文件,这可能会更慢。对于较小的文件,没关系。
几点:
使用上下文管理器(with
语句)打开文件。当with
语句结束时,文件将自动关闭。
re.findall()
的替代方法是re.match()
或re.search()
。后续代码会略有不同。
org
,sequence
和numbers
是相关的元素,我建议您维护一个包含3元素元组的列表。当然,您已经缓冲了组织字段,并在获得下一行时添加到元组列表中。
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)