使用python读取文本表

时间:2018-07-17 12:34:57

标签: python data-structures text-files

我有一个看起来像这样的表(注意,这是一个小节,这里有40多个字段)

enter image description here

我想问问有没有一种方法可以用Python读取并存储为列表列表?

[[804,01000001,jj,01asdas],[804,0100002,hh,1-NetSassassdasdsds]]

4 个答案:

答案 0 :(得分:1)

您可以顺序分析该行,将带有短划线的行扔掉,分割文件,然后将其附加到列表中

data = []
with open(file) as f:
    for line in f:
        if '-' not in line:
            data.append(line.split('|')[1:-1])

在以下示例中进行了测试

----------------------
|id|f1   |f2   |f3   |
----------------------
|12|01001|jj|01|
|12|01001|jj|01|

打印以下输出

[['id', 'f1   ', 'f2   ', 'f3   '],
 ['12', '01001', 'jj', '01'],
 ['12', '01001', 'jj', '01']]

答案 1 :(得分:0)

您可以丢弃前三行标题行,剥离最外面的|,然后以|作为分隔符来分隔行,最后剥离空白。

使用列表推导,假设您的表文本存储在data中:

arr = [(f for f in l.strip('|').split('|')) for i, l in enumerate(data.split('\n')) if i > 2]

答案 2 :(得分:0)

基于评论:

import pandas as pd

arr = pd.read_csv('path_to_txt_file.txt', sep='|').values.tolist()

经过以下文本文件测试:

h1|h2|h3
abc|foo|bar
abc2|foo2|bar2

输出

>>> pd.read_csv('random.txt', sep='|').values.tolist()
[['abc', 'foo', 'bar'], ['abc2', 'foo2', 'bar2']]

答案 3 :(得分:0)

这是我遵循的步骤- 1.从文本文件中读取行。 2.用pipe(“ |”)分割每一行,然后仅提取具有任何字母数字字符的那些元素。 3.最后,从列表列表中删除空白列表(省去第一行和第三行)。

这是代码-

lines = open("test.txt","r").readlines()
l = []
for line in lines :
    temp = line.split("|")
    l = l + [[x.strip() for x in temp if re.match('^[\w-]+$', x.strip()) is not None]]
finalList = [x for x in l if x != []]

finalList应该会给您想要的答案。