我正在捕获包含以下内容的文件:
*> <'Char><'Char><'space><'string>*
例如: 原始文件
Fs .file1
M /home/file2
?? /home/file3
M /home/file4
D /home/file5
我正在尝试将每一行放入列表中并始终获得一个包含2列的数组。我试过了
line.split(' ')
但它不起作用,因为每行的第一个或第二个位置可能会出现一个空字符。
所以,我需要在第二个字符后进行拆分,这意味着上面文件的结果将是:
['Fs','.file1']
[' M','./home/file2']
['??','./home/file3']
['M ','./home/file4']
[' D','./home/file5']
如果修剪firl数组索引上的空字符
也是可以接受的['Fs','.file1']
['M','./home/file2']
['??','./home/file3']
['M ','./home/file4']
['D','./home/file5']
答案 0 :(得分:3)
使用rsplit
假设内容在您的问题中看起来都像:
lines ="""Fs .file1
M /home/file2
?? /home/file3
M /home/file4
D /home/file5"""
for line in lines.splitlines():
# splitting once on " " starting from the right
# side keep all whitespace on the left elements
print(line.rsplit(" ",1))
['Fs', '.file1']
[' M', '/home/file2']
['??', '/home/file3']
['M ', '/home/file4']
[' D', '/home/file5']
只需在您自己的代码中使用以下内容:
print [line.rstrip().rsplit(" ",1)for line in f]
或者@jonClements建议使用line.rpartition(' ')[::2]
来确保每个列表都有两个元素:
print [line.rpartition(' ')[::2] for line in f]
答案 1 :(得分:1)
如果文件名前面总是有3个字符(固定宽度),那么按照简单的方法操作:
flags, filename = line[:2], line[3:]
没有必要做正确而不是正确的事情。