我有一个格式很好的数据文件,其数据结构如下:
" id1 id2 id3 id4"
" id1 id2 id3 id4"
" id1 id2 id3 id4"
我应该在每一行中检索id2和id4,但是id之间每行中的空格数不同。有没有办法我可以用'/ t'之类的字符替换每一行中的所有连续空格,这样我就可以在每一行中检索第二和第四项? 我感谢任何帮助。
答案 0 :(得分:8)
最简单的方法是执行.split()
自动拆分任意数量的空白字符并忽略前导和尾随空格:
>>> s = " id1 id2 id3 id4"
>>> items = s.split()
>>> items
['id1', 'id2', 'id3', 'id4']
这样,您就可以直接访问items[1]
和items[3]
。如果要将它们重建为以制表符分隔的字符串,请使用.join()
:
>>> "\t".join(items)
'id1\tid2\tid3\tid4'
答案 1 :(得分:3)
使用re.sub
>>> import re
>>> s = " id1 id2 id3 id4"
>>> re.sub('\s+',' ',s.strip())
'id1 id2 id3 id4'
你可以使用分割和切片:
>>> s = " id1 id2 id3 id4"
>>> s.split()[1::2]
['id2', 'id4']
使用re.findall:
>>> s = " id1 id2 id3 id4"
>>> re.findall('id[24]',s)
['id2', 'id4']
答案 2 :(得分:1)
您只需要拆分以获取元素:
s = " id1 id2 id3 id4"
frst,sec,th,frth = s.split()
print(sec,frth)
id2 id4
答案 3 :(得分:1)
>>> s = " id1 id2 id3 id4"
>>> s.split()
['id1', 'id2', 'id3', 'id4']
>>> '\t'.join(s.split())
'id1\tid2\tid3\tid4'
>>> print '\t'.join(s.split())
id1 id2 id3 id4
要提取id2
和id4
,请使用str.split
>>> a, b = s.split()[1], s.split()[3]
>>> a, b
('id2', 'id4')
答案 4 :(得分:1)
import re
re.sub(' +', ' ', string)
答案 5 :(得分:0)
这不是最优雅的方式,但很容易理解。此函数用一个空格替换连续的空格。
def remove_extra_spaces(s):
s_res = ""
flip = False
for c in s:
if c == ' ':
# first one is ok, next ones not
if not flip:
s_res += c
flip = True
else:
flip = False
s_res += c
return s_res