【发布时间】:2016-09-20 21:08:59
【问题描述】:
我正在尝试分析此文本文件中的一些信息(其中之一 许多我想以相同的格式分析)
.txt 文件中有一个表格,其中包含我需要的信息
表格总是有 16 列,但行数会有所不同
该表的列由管道“|”分隔以及由这些分隔的行:'+--------+--------+'
我将文件 (.split('+---+')) 拆分为一个列表 ('newlist'),其中每个 元素是一行(第 1 行 = newlist[0])
- 我在 表格结束('..image::' 在哪里)
现在我想将行拆分为 他们的专栏我可以用 .split('|') 轻松做到这一点
我创建了一些运行良好的循环并考虑了一个变量 行数
-
def row() 将新列表放入 list_i list_i 是 列表,其中每个元素是该行中一个框的内容(使用 split('|') 对于这个特定的测试文件,我可以上到第 (29) 行
我对按列的数据感兴趣 下一个循环创建一个列表 使用列信息 def column() 查看范围内的所有行(数字 行数)并为所有这些行提取相同的索引。所以栏(9) 会拉row(0)[9], row(1)[9]....一直拉到最后一行
我的问题是,这在我到达第 (9) 列之前效果很好,然后 它说列表索引超出范围
-
对不起,我知道这个问题已经被问过很多次了,但不知道怎么回事
谢谢!
输入文件:https://drive.google.com/open?id=0B_JDBrcvs5VcRU1ueE5kUlVoYlk
f = open("999A.txt")
text_in_file = f.read().strip().split('+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+')
f.close()
newlist = []
for item in text_in_file:
newlist.append(item)
matching = [s for s in newlist if ".. image::" in s]
for item in newlist:
if newlist.index(item) >= newlist.index(matching[0]):
newlist.remove(item)
num_rows = len(newlist) - 1
def row(i):
row_i = newlist[i+1]
list_i = list(row_i.strip().split('|'))
return list_i[1:17]
def column(i):
list_i = []
for z in range(num_rows):
list_i.append(row(z)[i])
return list_i[1:]
for i in range(30):
print(row(i))
print("columns:")
for i in range(16):
print(column(i))
【问题讨论】:
-
请出示您的输入文件;或者更好的是,显示产生相同问题的输入文件的小版本。
-
我会忽略所有不以
|开头的行,并拆分那些在|上执行的行...这似乎是您获取列所需的全部内容跨度>
标签: python