2

Pythonを使用して文字列をファイルに書き込むのに問題があります:(私がやろうとしているのは、Pythonを使用していくつかのCプログラムを生成することです)私が持っているコードは次のとおりです。

filename = "test.txt"
i = 0
string = "image"
tempstr = ""
average1 = "average"
average2 = "average*average"
output = ""
FILE = open(filename,"w")
while i < 20:
    j = 0
    output = "square_sum = square_sum + "
    while j < 20:        
        tempstr = string + "_" + str(i) + "_" + str(j)        
        output = output + tempstr + "*" + tempstr + " + " + average2 + " - 2*" + average1 + "*" + tempstr        
        if j != 19:        
            output = output + " + "
        if j == 19:
            output = output + ";"        
        j = j + 1
    output = output + "\n"
    i = i + 1
    print(output)
    FILE.writelines(output)    
FILE.close

印刷すると正しい出力が得られますが、ファイルの最後の行が欠落しており、最後から2番目の行の一部が欠落しています。文字列をファイルに書き込む際の問題は何ですか?

ありがとうございました!

4

5 に答える 5

7

メソッドを呼び出した場合はおそらく助けになります...

FILE.close()
于 2012-06-26T01:15:59.783 に答える
3

問題は、メソッドを呼び出していないことですclose()。最後の行でそれについて言及しているだけです。関数を呼び出すには、親が必要です。

ただし、 Pythonのwithステートメントにより、これは不要になる可能性があります。

with open(filename,"w") as the_file:
    while i < 20:
        j = 0
        output = "square_sum = square_sum + "
        ...
        print(output)
        the_file.writelines(output)

with句が終了すると、はthe_file自動的に閉じられます。

于 2012-06-26T01:19:38.097 に答える
2

試す:

with open(filename,"w") as FILE:
    while i < 20:
        # rest of your code with proper indent...

近い必要はありません...

于 2012-06-26T01:19:53.827 に答える
1

まず、コードのPython化バージョン:

img = 'image_{i}_{j}'
avg = 'average'
clause = '{img}*{img} + {avg}*{avg} - 2*{avg}*{img}'.format(img=img, avg=avg)
clauses = (clause.format(i=i, j=j) for i in xrange(20) for j in xrange(20))
joinstr = '\n    + '
output = 'square_sum = {};'.format(joinstr.join(clauses))

fname = 'output.c'
with open(fname, 'w') as outf:
    print output
    outf.write(output)

第二に、狂信的なインライン化によってCコードを高速化することを望んでいるようです。スピードの向上があなたの努力を正当化するのではないかと私は非常に疑っています

maxi = 20;
maxj = 20;
sum = 0;
sqsum = 0;
for(i=0; i<maxi; i++)
    for(j=0; j<maxj; j++) {
        t = image[i][j];
        sum += t;
        sqsum += t*t;
    }

square_sum = sqsum + maxi*maxj*average*average - 2*sum*average;
于 2012-06-26T02:29:58.880 に答える
0

インデントが正しくないように見えますが、コードに関するその他のコメントは次のとおりです。

writelines()リストまたはイテレータの内容をファイルに書き込みます。単一の文字列を出力するので、を使用するだけwrite()です。

lines ["lineone\n", "line two\n"]
f = open("myfile.txt", "w")
f.writelines(lines)
f.close()

あるいは単に:

output = "big long string\nOf something important\n"
f = open("myfile.txt", "w")
f.write(output)
f.close()

+=別の注意点として、演算子を使用すると役立つ場合があります。

output += "more text"
# is equivalent to
output = output + "more text"
于 2012-06-26T01:27:08.040 に答える