2017-09-11 1 views
1

私は、リストに(文字列として)次のように追加する、EAN番号の行区切りリストを持つ生のテキストファイルを持っています:私はリストのリストを持っています、私は10でグループ化したい

listofEAN = [] 
with open('Data', newline='\r\n') as inputfile: 
    for row in csv.reader(inputfile): 
     listofEAN.append(row) 

これは形式の「リストのリスト」(私はなぜそれが単一のリストを作成していないかわからない?)が作成されます:私は変換やろうとしている

[['0075678660924'], ['0093624912613'], ['3299039990322'], ['0190295790394'], ['0075678660627'], ['0075678661150'], ...] 

を10個のEANを持つリストのリストへのリスト。したがって、listofEAN[0]を実行すると、最初の10個のEANが返されます。

私はこれをするのに苦労しています - 私はある種のループを使用する必要があると推測しますが、ループの作成とループ構文とリストの構文の組み合わせに問題があります。

いずれのポインタも大歓迎です。

編集:How do you split a list into evenly sized chunks?のクエリと似ていますが、リストをインポートする方法のここでの修正は特に重要です。ありがとうございました!

+0

行は、それがない必要がありますように思えます単なる文字列であれば、代わりに1文字列のリストです。空でないことがわかっている場合は、配列の[0]要素としてアクセスすることができます –

+0

ファイル 'Data'はどのように見えますか? –

+1

'listofEAN + = row'はフラットなリストを提供します。 (あなたの質問への答えではありません) – Stael

答えて

1

CSVファイルのrowは、1つの列だけのファイルの場合でも、常に一覧になります。 1行に1つの値しかない場合は、CSVリーダーを使用する必要はありません。ちょうど平らなリストを作成し、各ラインから空白を取り除く、および標準のユニバーサル改行のサポートを使用します。

with open('Data') as inputfile: 
    # create a list of non-empty lines, with whitespace removed 
    stripped = (line.strip() for line in inputfile) 
    listofEAN = [line for line in stripped if line] 

は、今ではgroups of a fixed sizeにそれを作ることは簡単です:

per_ten = [listofEAN[i:i + 10] for i in range(0, len(listofEAN), 10)] 
+0

「ストリップされた」必要がありますか? 'listofEAN = [line.isspace()]ではないならば、行内の行のための[line.strip()]'? –

+1

@Chris_Rands:これはまったく別の変種です。どちらも有効なアプローチです。私は余分なメソッド呼び出しを避けています。 –

+0

ああ - これはうまくいくように見えます!訂正していただきありがとうございます:生のテキストファイルをインポートする方法 - 私は単一の円柱形式が投げたと思う。 – jbentley

関連する問題