在python中是否有从文件中读取表的包
我使用python包以表格格式将一些数据存储在一个文件中:tablate在python中是否有从文件中读取表的包,python,tabular,Python,Tabular,我使用python包以表格格式将一些数据存储在一个文件中:tablate >>> print tabulate(table, headers, tablefmt="orgtbl")$ 该表如下所示: | name | num | |--------+-------| | abcd | 30 | | efgh | 100 | | ijklm | 10 | 现在我需要将这些数据提供给其他一些程序(用python编写)。 有没有简单的方法(我指的
>>> print tabulate(table, headers, tablefmt="orgtbl")$
该表如下所示:
| name | num |
|--------+-------|
| abcd | 30 |
| efgh | 100 |
| ijklm | 10 |
现在我需要将这些数据提供给其他一些程序(用python编写)。
有没有简单的方法(我指的是任何包)将表读入某个数据结构,而不是显式地解析它。换句话说,我可以将表打印成其他格式(例如:网格、管道、媒体wiki、latex)是否有现成的解决方案将其从任何此类格式读入数据结构?您可以查看一下(以前称为),看看它是否做了一些您想要的事情
下面显示了一些可用的ASCII格式,而支持的格式部分包含完整列表
- 基本:具有可自定义分隔符和标题配置的基本表
- Cds:Cds格式表(也包括Vizier和ApJ机器可读表)
- Daophot:IRAF Daophot包中的表
- Ecsv:增强的CSV格式
- FixedWidth:具有固定宽度列的表(另请参见固定宽度库)
- Ipac:Ipac格式表
- HTML:包含在标记中的HTML格式表
- Latex:表格环境中具有datavalue的Latex表
- Rdb:用制表符分隔的值,在列定义行后加一行
- SExtractor:SExtractor格式表
csv.reader
可以:
from csv import reader
with open('table') as f:
next(f) # throw away header
next(f) # throw away |-----+-----|
for line in reader((l.strip().strip('|') for l in f), delimiter='|'):
print(line)
输出:
[' abcd ', ' 30 ']
[' efgh ', ' 100 ']
[' ijklm ', ' 10 ']
['abcd', '30']
['efgh', '100']
['ijklm', '10']
不完美,但很接近
但是,在我看来,手动解析更具可读性:
with open('table') as f:
next(f) # throw away header
next(f) # throw away |-----+-----|
for line in f:
print(line.strip().strip('|').split('|'))
扔掉多余的空间也很容易:
with open('table') as f:
next(f) # throw away header
next(f) # throw away |-----+-----|
for line in f:
print([scalar.strip() for scalar in line.strip().strip('|').split('|')])
输出:
[' abcd ', ' 30 ']
[' efgh ', ' 100 ']
[' ijklm ', ' 10 ']
['abcd', '30']
['efgh', '100']
['ijklm', '10']
也就是说,我将使用
制表
仅用于显示数据。对于存储,我会使用csv
或json
如果以后需要重用它,那么为什么要这样存储数据呢?不要!以易于解析的方式存储它,如CSV或JSON。@shuttle87可能是OP想要一种人性化的格式。如果您对制表
模块怀恨在心,也许你可以和开发人员一起解决这个问题。我当然对格式没有怨恨,但如果目标是与其他程序共享数据,我会忍不住想,如果你能控制源代码,以不同的格式序列化数据会更容易。markdown->html->xpath->csv