4

我绝不是程序员,但我偶然发现了一个非常讨厌的固定宽度的 ASCII 表,这可能需要我成为一个:)(我希望能得到你们的帮助)

我确实已经向 Google 先生征求了一些建议,他为我指出了 Python 的方向。所以我在这里 - 很迷茫:(

有问题的表如下所示:

列 1 列 2 列 3 列 4 列 5 列 6 列 7 ... 列 N
   数据 垃圾 垃圾 数据 垃圾 垃圾 数据
   数据 垃圾 垃圾 数据 垃圾 垃圾 数据
   数据垃圾垃圾数据垃圾垃圾   
   数据垃圾垃圾垃圾垃圾   
   数据 垃圾 垃圾 数据 垃圾 垃圾 数据
   数据 垃圾 垃圾 数据 垃圾 垃圾 数据
   数据 废话 废话 废话 数据
   数据垃圾数据垃圾数据垃圾数据
   数据 垃圾 垃圾 数据 垃圾 垃圾 数据
   数据 垃圾 垃圾 数据 垃圾 垃圾 数据

正如您所看到的,列数可能会有所不同,并且表中有些部分没有数据,也有一些列包含我不感兴趣的数据。

我的目标是最后有一个表格,如下所示:

列 1 列 4 列 7 ... 列 N
   数据数据数据
   数据数据数据
   数据数据       
   数据           
   数据数据数据
   数据数据数据
   数据数据
   数据数据数据
   数据数据数据
   数据数据数据

所以,现在我不想要的所有列都消失了。这基本上是我的目标 - 一个只有我感兴趣的列的表。你认为这样的事情可以在 Python 中完成吗?

4

3 回答 3

2

听起来您正在尝试从文本文件中读取表格信息,然后重新格式化。一些基本处理可能如下所示:

# First read content into an array
# Each item in the array will be a line of the file
with open('filename.txt') as f:
    content = f.readlines()

# Next, parse each line
data = []
for line in content:
    # You might need to split by spaces
    # This takes care of multiple whitespaces, so "data1   data2 data3    data4"
    # Becomes ['data1','data2','data3','data4']
    row = line.split()
    # Or, maybe you will need to split the row up by tabs into an array
    # [] is a list comprehension, strip() will remove extra whitespace
    row = [item.strip() for item in line.split('\t')]
    # Finally, append the row to your data array
    data.append(row)

# Now, print the data back to a file how you'd like
fout = open('output.txt','w')
for row in data:
   # For specific columns
   fout.write('{0} {1} {2} {3}'.format(row[0],row[1],row[7],row[8]))
   # Or, if you just need to remove a couple columns, you might do:
   row.pop(6)
   row.pop(5)
   row.pop(4)
   fout.write(' '.join(row))
于 2012-07-13T08:31:46.913 回答
1

是的,这可以做到。在 python 中,字符串是序列,因此您可以使用固定索引将行分割成列:

>>> row = "   data    crap    crap            crap    crap   data"
>>> width = 8 # Column width
>>> columns = [row[i*width:(i+1)*width].strip() for i in range((len(row)/width)+1)]
>>> columns
['data', 'crap', 'crap', '', 'crap', 'crap', 'data']

现在您所要做的就是选择您的列:

>>> columns[0], columns[3], columns[6]
('data', '', 'data')

我可以想象上面的代码对你来说仍然是胡言乱语;我强烈建议您开始阅读有关学习编程的内容。Python 是一门优秀的语言,从http://wiki.python.org/moin/BeginnersGuide开始,然后从那里开始!

于 2012-07-13T08:20:27.813 回答
0

虽然我真的认为你应该为了学习 python 而在 python 中编写代码,但如果你只想完成它,请尝试使用 Excel!

  • 在表格中阅读(如果 Excel 无法弄清楚这一点,我会感到惊讶!)
  • 删除您不感兴趣的列
  • 导出/另存为固定宽度
于 2012-07-13T08:33:18.310 回答