<p>从@Rishikesh Jha(谢谢)那里得到灵感,下面是我建议的答案(<em>不使用像pandas这样的高级库</em>):</p>
<pre><code>import re
INPUT = """Filesystem Type 1K-blocks Used Available Use%
Mounted on
/dev/sda ext4 245671 47009 181459 21% /initlo
/dev/loop7 squashfs 39552 39552 0 100% /
none tmpfs 65536 1064 64472 2% /tmp
none aufs 65536 1064 64472 2% /dev
none tmpfs 510184 24 510160 0% /dev/shm
none aufs 65536 1064 64472 2% /etc
none aufs 65536 1064 64472 2% /var
none aufs 65536 1064 64472 2% /www
none aufs 65536 1064 64472 2% /mcl
none aufs 65536 1064 64472 2% /eds
"""
def split_spaces(s):
"Split a string into a list, using spaces/tabs as separators"
return re.split('\s+', s.strip())
def make_dict(input):
"Convert a string containing a table into a list of dictionaries"
input_list = input.splitlines()
output_list = []
# get the keys:
keys = split_spaces(input_list[0])
# get the list of dictionaries:
for line in input_list[1:]:
values = split_spaces(line)
output_list.append({key: value for key,value in zip(keys, values)} )
return output_list
print("Table: ", make_dict(INPUT))
row1 = d[0]
print("First row:", row1)
print("The type of first row is:", row1['Type'])
</code></pre>
<p>结果如下:</p>
<pre><code>Table: [{'Filesystem': 'Mounted', 'Type': 'on'}, {'Filesystem': '/dev/sda', 'Type': 'ext4', '1K-blocks': '245671', 'Used': '47009', 'Available': '181459', 'Use%': '21%'}, {'Filesystem': '/dev/loop7', 'Type': 'squashfs', '1K-blocks': '39552', 'Used': '39552', 'Available': '0', 'Use%': '100%'}, {'Filesystem': 'none', 'Type': 'tmpfs', '1K-blocks': '65536', 'Used': '1064', 'Available': '64472', 'Use%': '2%'}, {'Filesystem': 'none', 'Type': 'aufs', '1K-blocks': '65536', 'Used': '1064', 'Available': '64472', 'Use%': '2%'}, {'Filesystem': 'none', 'Type': 'tmpfs', '1K-blocks': '510184', 'Used': '24', 'Available': '510160', 'Use%': '0%'}, {'Filesystem': 'none', 'Type': 'aufs', '1K-blocks': '65536', 'Used': '1064', 'Available': '64472', 'Use%': '2%'}, {'Filesystem': 'none', 'Type': 'aufs', '1K-blocks': '65536', 'Used': '1064', 'Available': '64472', 'Use%': '2%'}, {'Filesystem': 'none', 'Type': 'aufs', '1K-blocks': '65536', 'Used': '1064', 'Available': '64472', 'Use%': '2%'}, {'Filesystem': 'none', 'Type': 'aufs', '1K-blocks': '65536', 'Used': '1064', 'Available': '64472', 'Use%': '2%'}, {'Filesystem': 'none', 'Type': 'aufs', '1K-blocks': '65536', 'Used': '1064', 'Available': '64472', 'Use%': '2%'}]
First row: {'Filesystem': '/dev/sda', 'Type': 'ext4', '1K-blocks': 245671, 'Used': 47009, 'Available': 181459, 'Use%': '21%', 'Mounted': '/initlo', 'on': nan}
The type of first row is: ext4
</code></pre>
<h3>注</h3>
<p><code>split_spaces</code>函数足够健壮,如果您有多个空格或制表符,甚至是两个空格或制表符的混合,那么它无论如何都可以工作。参见<a href="https://www.w3schools.com/jsref/jsref_regexp_whitespace.asp" rel="nofollow noreferrer">definition of ^{<cd2>}in a regular expression</a>;符号<code>+</code>表示“一个或多个”。你知道吗</p>