2016-09-19 16 views
0

となるので、リストのリストを別々のファイルに書き込もうとしています。 各リストには10​​0文字以下のオブジェクトが含まれます。目標は、100行未満のテキストファイルをそれ以上保存しないことです。リストのリストを別々のテキストファイルに書き出すと、そのリストにあるリストごとに1つのファイル

これを行うには、私はリストを分割しましたが、今はファイルに書き込む際に問題が発生しています。 リスト内のリストを自分の別のファイルに書く必要があります。合計275個の文字列オブジェクトがあります。

size=100 
list_ofList_flows=[parameter_list[i:i+size] for i in range(0,len(parameter_list), size)] 
#above list_ofList_flows contains [100][100][75] in terms of length 

fileNumbers = int(math.ceil((len(parameter_list)/100))) 
#fileNumbers is 3, because we have 3 sets of lists[100, 100, 75] 

i = 0 
while i < fileNumbers: 

    for flowGroup in list_ofList_flows: 
     f = open("workFlow_sheet" + str(i) + ".txt", "w") 

     for flo in flowGroup: 
      f.write(flo + '\n') 



    i = i + 1 
+0

コードのフォーマットを改善し、サンプルの入出力を提供してください。 – albert

+0

'for'ループ内の各ファイルを' close() 'しないで、' while'ループの外側で 'i'をインクリメントします。実際に質問をしないので、何がうまくいかないのか分かりません(あなたのコードでインデントが正しいと仮定して) – roganjosh

+0

@roganjosh申し訳ありませんが、より良いフォーマットです。彼らはすでにファイルに書き込まれています。 Hwoever、すべての3つのファイルは同じデータを持っています...いくつかのロジック私はforループでここで行方不明です。それは残っていない最初の100文字列のオブジェクトを書いているだけです – dedpo

答えて

1

このようなものが動作します。私はrandomを使用して、いくつかのデータを275要素長のリストに生成する必要がありました。

import random 

def chunks(l, n): 
    n = max(1, n) 
    return [l[i:i + n] for i in range(0, len(l), n)] 

data = [random.randint(0, 10) for x in range(275)] 

chunked_data = chunks(data, 100) 

for file_num, sublist in enumerate(chunked_data): 
    with open("workFlow_sheet{}.txt".format(file_num), 'w') as outfile: 
     for item in sublist: 
      outfile.write(str(item) + '\n') 

基本的には、100の最大長さのネストしたリストにあなたのデータをサブ分割して、独自のファイルに各ネストされたリストの内容を書き込みます。

EDIT

私は実際に同じデータを含む各ファイルの面で問題を再現することができませんでした。しかし、間違った範囲でiをインクリメントしました(余分なインデントが必要です。私はあなたのコードに複数のファイルを上書きしていたと思います)、各繰り返しでファイルがclose()ではありませんでした。 with(Python context manager)を使用すると、操作が完了したら自動的にファイルを閉じるという意味です。私はだと思います。これは元のコードを修正したものですが、ランダムなリストが生成されています。

import random 
import math 

parameter_list = [random.randint(0, 10) for x in range(275)] 

size=100 
list_ofList_flows=[parameter_list[i:i+size] for i in range(0,len(parameter_list), size)] 
#above list_ofList_flows contains [100][100][75] in terms of length 

fileNumbers = int(math.ceil((len(parameter_list)/100))) 
#fileNumbers is 3, because we have 3 sets of lists[100, 100, 75] 

i = 0 
while i < fileNumbers: 

    for flowGroup in list_ofList_flows: 
     f = open("workFlow_sheet" + str(i) + ".txt", "w") 

     for flo in flowGroup: 
      f.write(str(flo) + '\n') 
     f.close() 


     i = i + 1 
+0

Perfecto!ここには鍵が開いている。私がどこに間違っていたのか教えていただけますか? – dedpo

+0

@dedpoちょうどそれについて調べ始めて、私の答えをちょっときれいにしようとしています – roganjosh

+1

@dedpoを編集し、 'iterator_count'を取り除くために' enumerate'を使うようにコードを整理しました。うまくいけば、それは明らかにする。 – roganjosh

関連する問題