Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中是否有从文件中读取表的包_Python_Tabular - Fatal编程技术网

在python中是否有从文件中读取表的包

在python中是否有从文件中读取表的包,python,tabular,Python,Tabular,我使用python包以表格格式将一些数据存储在一个文件中:tablate >>> print tabulate(table, headers, tablefmt="orgtbl")$ 该表如下所示: | name | num | |--------+-------| | abcd | 30 | | efgh | 100 | | ijklm | 10 | 现在我需要将这些数据提供给其他一些程序(用python编写)。 有没有简单的方法(我指的

我使用python包以表格格式将一些数据存储在一个文件中:tablate

>>> 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