1
final=open("war.txt","w+")
for line in madList:
  line=line.split('A ')
  dnsreg= line[1]
  print dnsreg
  final.write(dnsreg)

印刷中dnsregに出力を確認できますが、ファイルに書き込むと何も書き込まれません。構文エラーもありません。何か案が?

4

2 に答える 2

3

ファイルに書き込まれたデータはすぐに書き込まれるのではなく、バッファーに保持され、一度に大量のデータが書き込まれるため、ディスクへの書き込みのオーバーヘッドが節約されます。ただし、ファイルを閉じると、バッファリングされたすべてのデータがディスクにフラッシュされます。

したがって、次の 2 つのことを行うことができます。

  1. 終わったら電話final.close()するか、
  2. ファイルを閉じたくない場合はfinal.flush()afterを呼び出します。final.write()

@Matt Tanenbaum のおかげで、Python でこれを処理するための本当に良い方法は、withブロック内で書き込みを行うことです。

with open("war.txt","w+") as final:
    for line in madList:
        line=line.split('A ')
        dnsreg= line[1]
        print dnsreg
        final.write(dnsreg)

これを行うと、ファイルを閉じることを心配する必要がなくなります。ただし、プログラムが途中で終了する場合 (例: 例外による) には、フラッシュが必要になる場合があります。

于 2012-12-25T07:13:55.840 に答える
1

withファイルの開閉など、セットアップと破棄が必要なリソースを使用する場合は、Python でステートメントを使用する必要があります。何かのようなもの:

with open("war.txt","w+") as myFile:
    for line in madList:
        line=line.split('A ')
        dnsreg= line[1]
        myFile.write(dnsreg)

を使用しない場合はwith、手動でファイルを閉じる必要があります。その場合、try...finallyブロックを使用してこれを処理できます。

try:
    myFile = open("war.txt", "w+")
    for line in madList:
    line=line.split('A ')
    dnsreg= line[1]
    myFile.write(dnsreg)
finally:
    myFile.close()

finally常に機能するため、ファイルが閉じられ、変更が書き込まれます。

于 2012-12-25T07:28:24.943 に答える