4

フォームのtxtファイルにデータがあります。タブ区切りのデータ

here
     a b c
     e f g
tere
     x y z
     w t y

列をリストに読み込む必要があります。お気に入り

col1 = ['here', '', '', tere, '', '']
col2= ['', 'a', 'e', '', 'x'.'w']

等々。

利用した

import re

infile = open('text.txt', 'r')
i=0
a0='';a1='';a2='';a3='';a4='';a5='';a6='';a7='';
for line in infile:
    [a1[i],a2[i],a3[i],a4[i],a5[i],a6[i],a7[i],a8[i]] = line.split('\t')
    i+=1

'str'オブジェクトはアイテムの割り当てをサポートしていないと表示されます。

任意のヒント?

4

5 に答える 5

6

列ごとに変数に割り当てられたすべてのデータが必要な場合は、リストから始めます。

per_row = []
for line in infile:
    per_row.append(line.strip().split('\t'))

そして、それを列のリストに変えてください:

per_column = zip(*per_row)

これはリストのリストになりました。per_column[0]データの最初の列です。

ただし、実際には、代わりにcsvモジュールを使用して表形式のデータを読み取りたいと考えています。

残念ながら、あなたのコードは Python の動作に十分に近づいていません。いくつかの変数に空の文字列を割り当ててから、それらをリストとして使用しようとしました。

于 2013-03-23T09:04:30.370 に答える
2

@Martijn Pietersの回答への修正

こんなはずじゃなかった

per_row = []
for line in infile:
    per_row.append(line.split('\t'))

そして、それを列のリストに変えます:

per_column = zip(*per_row)

これはリストのリストになりました。per_column[0]データの最初の列です。

これにより、私が望む結果が得られます。strip()空白セルも削除します。

于 2013-03-23T09:37:01.990 に答える
0

ここ、

a0='';a1='';a2='';a3='';a4='';a5='';a6='';a7='';

空の文字列に対して変数を宣言すると、それらは不変の文字列であるため、文字列を個別に(文字ごとに)変更することはできません。

[a1[i],a2[i],a3[i],a4[i],a5[i],a6[i],a7[i],a8[i]] = line.split('\t')

したがって、文字列の代わりに文字列のリストを使用できます。

于 2013-03-23T09:07:13.817 に答える
0

このcsvモジュールは、多くの場合、タブ区切りファイルを処理するための最良の方法でもあります:

from __future__ import print_function

import csv

MAXCOLS = 4
cols = [[] for _ in xrange(MAXCOLS)]
with open('text.txt', 'rb') as input:
    for row in csv.reader(input, delimiter='\t'):
        for i in xrange(MAXCOLS):
            cols[i].append(row[i] if i < len(row) else '')

for i in xrange(MAXCOLS):
    print('cols[{}]: {}'.format(i, cols[i]))

出力:

cols[0]: ['here', '', '', 'tere', '', '']
cols[1]: ['', 'a', 'e', '', 'x', 'w']
cols[2]: ['', 'b', 'f', '', 'y', 't']
cols[3]: ['', 'c', 'g', '', 'z', 'y']
于 2013-03-23T10:09:13.210 に答える
0
import csv

## open file
infile = open('col2Rows.txt', 'r')

## define csv reader object, assuming delimiter is tab
tsvfile = csv.reader(infile, delimiter='\t')

lines = []

## iterate through lines in file
for line in tsvfile:
    lines.append(line)

print "Col1",[line[0] for line in lines]

Martijn Pieters が言ったように、csv モジュールは非常に便利です。メモリ不足にならないように注意してください (つまり、入力ファイルが大きすぎないようにしてください)。

于 2013-09-09T17:55:17.297 に答える