4

私は決してプログラマーではありませんが、本当に厄介な固定幅のASCIIテーブルに出くわしたので、1つになる必要があるかもしれません:)(皆さんの助けを借りて)

私はすでにグーグル氏にアドバイスを求めていましたが、彼は私をPythonの方向に向けました。だからここに私は-かなり失われました:(

問題のあるテーブルは次のようになります。

column1 column2 column3 column4 column5 column6 column7 ... columnN
   データがらくたがらくたデータがらくたがらくたデータ
   データがらくたがらくたデータがらくたがらくたデータ
   データがらくたがらくたデータがらくたがらくた   
   データがらくたがらくたがらくた   
   データがらくたがらくたデータがらくたがらくたデータ
   データがらくたがらくたデータがらくたがらくたデータ
   データがらくたがらくたがらくたデータ
   データがらくたがらくたデータがらくたデータ
   データがらくたがらくたデータがらくたがらくたデータ
   データがらくたがらくたデータがらくたがらくたデータ

ご覧のとおり、列の数はさまざまであり、テーブルにはデータがない部分があり、興味のないデータがある列もあります。

私の目標は、最後に次のようなテーブルを作成することです。

column1 column4 column7 ... columnN
   データデータデータ
   データデータデータ
   データデータ       
   データ           
   データデータデータ
   データデータデータ
   データデータ
   データデータデータ
   データデータデータ
   データデータデータ

これで、不要な列がすべてなくなりました。それが基本的に私の目標です。興味のある列だけを含むテーブルです。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 に答える