2016-05-08 7 views
0

私はハイキスを生成するMarkovテキストジェネレータを作成しています。 俳句自体を生成する関数は、forループを使用して100個のハイカスを生成します。彼らはのようになります。ファイルへの書き込み、追加スペースの追加

私は、ファイルにこれらの行を書いてみたとき、私はそれぞれの俳句の間にスペースを含めるLINE1 LINE2 LINE3 LINE1 LINE2 LINE3 LINE1 LINE2 LINE3

ですので、次のようになります。

line1 
line2 
line3 

line1 
line2 
line3 

line1 
line2 
line3 

ファイルへの書き込み中はどうすればいいですか?

はまた、時にはそれが は時々、それは私が私のループを構築する方法をline1line2line3

として書かれている...の形式を保持していないでしょうか?

私が試してみた:haikuListがどのように見える

def writeToFile(): 
    with open("results.txt", "w") as fp: 
     count = 0 
     for haiku in haikuList: 
      for line in haiku: 
       for item in line: 
        fp.write(str(item)) 
        count += 1 
     print "There are", count, "lines in your file." 

for lineループの後fp.write("\n")を入れ

[[line1, 
    line2, 
    line3], 
[line1, 
    line2, 
    line3], 
[line1, 
    line2, 
    line3], 
[line1, 
    line2, 
    line3]] 
+0

これをあなたが私に素晴らしい俳句を送るなら、私は大好きです:D – Aaron3468

答えて

1

使用str.join()

def writeToFile(): 
    with open("results.txt", "w") as fp: 
     fp.write('{}\n'.format('\n\n'.join(['\n'.join(haiku) for haiku in haikuList]))) 
     print "There are {} lines in your file.".format(len(haikuList)*3 + len(haikuList)-1) 

これは、単一の改行文字で区切られた各俳句から各行を出力します。 str.join()は、各俳句の間に新しい行を追加するためにも使用されます。 file.write()では、必要に応じて新しい行を追加する必要があります。そのためには、str.format()を使用しています。

最後に、ファイルに書き込まれる行の数は、各俳句の間の新しい行に3を掛けたhaikuListの長さと同じになるため、カウンタを必要としません。

もうひとつ、むしろ関数に変数の外部にアクセスするよりも、あなたはwriteToFile()関数に俳句リストを渡す必要があります。

def writeToFile(haikuList): 
    with open("results.txt", "w") as fp: 
     fp.write('{}\n'.format('\n\n'.join(['\n'.join(haiku) for haiku in haikuList]))) 
     print "There are {} lines in your file.".format(len(haikuList)*3 + len(haikuList)-1) 

を次に、このようにそれを呼び出す:

writeToFile(haikuList) 
+0

こんにちは、私は多分私の質問に少し間違って言いました。これは、それぞれの俳句を別々の行にまとめるという点で優れています。しかし、私は俳句の間に空白行を探していて、俳句の各行は別の行になっています。私はより明確にするために私の質問を編集しています! – natalien

+0

@natalien:要件の変更に答えようとする可能性があります。私は ''' .join()'の代わりに ''\ n'.join()'を使用し、ハイキスの間に余分な新しい行を追加するという答えを更新しました。 – mhawke

+0

ええ、私はちょうどそれを整理する方法について混乱していた。ありがとう! – natalien

1

。これは、各俳句の最後に空白行を追加します。

各項目の後にスペースを追加する必要がある場合は、fp.write(str(item))の後にfp.write(" ")を追加できます。

+0

または 'fp.write( ''。(項目ごとに1ずつインクリメントするのではなく、 'len(items)'を使うことができます) – SwiftsNamesake

1

俳句リストの各俳句は、liststrまたはunicodeであると仮定すると、このようなことを少し簡潔に行うことができます。このような

def writeToFile(): 
    with open("results.txt", "w") as fp: 
     count = 0 
     for haiku in haikuList: 
      fp.write(" ".join(haiku) + "\n"): 
      count += len(haiku) 
     print "There are", count, "lines in your file." 
+0

あなたの答えをありがとう!私は実際に私の質問にいくつかの編集を加えました。私は以前はあまり明確ではなかったことを実感しました! – natalien

関連する問題