2017-08-27 15 views
0

ファイル内の最初の文字を置き換えて、1または0のいずれかになりました。私のコードは次のとおりです。ファイルの最初の文字を置換するPython 2.7

import os 

hostName = raw_input("IP: ") 
communicate = open("communicate.txt", "w") 

while True: 
    response = os.system("ping " + hostName + " -c 1") 
    if response == 0: 
     # Replace first character with '1' 
    else: 
     # Replace first character with '0' 

私はこのコードを、Linux仮想マシンで端末から実行しています。

+3

ファイルを '" w "'で開くと、すでに上書きされています。 –

+1

'communications.txt'ファイルは空ですか?そうでない場合は、内容を保存しますか?(最初の文字を除く) –

答えて

0

これは、あなたがやりたいように見えます:

import os 
import time 

hostName = raw_input("IP: ") 
communicateFd = os.open("communicate.txt", os.O_CREAT | os.O_RDWR) 
communicate = os.fdopen(communicateFd, 'r+b') 

while True: 
    communicate.seek(0) 
    response = os.system("ping " + hostName + " -c 1") 
    if response == 0: 
     communicate.write('1') 
    else: 
     communicate.write('0') 
    time.sleep(1) 

communicate.close() 

他の人が指摘したように、もしあれば、モード'w'との開口部は、以前の内容を破壊し、ファイルを切り捨てます。

モジュールosを使用すると、ファイルのオープン方法を少しだけ制御できます。この場合は、存在しない場合にのみ作成され、読み取り/書き込みモードで開かれます。

ループの先頭には、ファイルの先頭にseekがあります。最初のバイトを必要なだけ何度も書き換えることができます。

これはタイトなループではないようにsleep文が追加されましたが、ファイルI/Oに影響を与えずに削除できます。

0
import os 

hostName = raw_input("IP: ") 
communicate = open("communicate.txt", "r+") 
while True: 
    response = os.system("ping " + hostName + " -c 1") 
    if response == 0: 
     text = communicate.read() 
     communicate.write(str(1) + text[1:]) 
    else: 
     text = communicate.read() 
     communicate.write(str(0) + text[1:]) 
communicate.close() 
0

あなたはファイルの内容を保存し、最初の文字を置き換えたい場合は、
することができます単にreadファイル、変数に(1文字を除く)、その内容を保存し、
、その後writeそれが上書きされたファイルで、例えば:

import os 

hostName = raw_input("IP: ") 

with open("communicate.txt", "r") as f: 
    content = f.read()[1:] 

while True: 
    response = os.system("ping " + hostName + " -c 1") 
    if response == 0: 
     with open("communicate.txt", "w") as communicate: 
      comunicate.write('1' + content) 
    else: 
     with open("communicate.txt", "w") as communicate: 
      comunicate.write('0' + content) 

あなたが第一の文字を置き換えるに維持したい場合は、 は、あなたがcontinueslyあなたのファイルを上書きする必要があります。
whileループのすべての反復でコードが数秒間スリープ状態になるようにするには、これがいくつかの検査であることをお勧めします。timeモジュールのsleep機能を使用してください。 私は助けてください!

関連する問題