2017-12-07 7 views
0

私は奇妙に書かれたソフトウェアを持った趣味のCNCマシンを持っています。それを使用するには、私はCADソフトウェアから出力されたファイルを取り出し、 ";"の後に改行(CRLF)を追加する必要があります。代わりにこれを行うPythonスクリプトを作ってみたいですが、動作させることはできません。誰かが私を正しい方向に向けることができますか?ファイルを読み込み、毎回 ";"の後にnewLineを追加すると、

import os 
import sys 

if not (len(sys.argv) == 2 and os.path.isfile(sys.argv[1])): 
    print(__doc__) 
    sys.exit(1) 

file_in = open(sys.argv[1], "r+") 
currentChar = file_in.read(1) 
i = 0 
while not currentChar: 
    if (currentChar == ";"): 
     file_in.seek(i) 
     file_in.write("\n") 
    currentChar = file_in.read(1) 
    i += 1 
file_in.close() 
+2

あなたのコードが正しいかどうかは分かりませんが、ファイルの読み書きは同時に問題を引き起こす可能性があります(R/Wポインタが壊れる可能性があります)。すべてのファイルの内容を(すぐに)読み込んで文字列にし、 '; \ 'で各オカレンスを置き換えてから、別のファイルにスティングを書き戻す必要があります。また、より高速に動作します。もちろん、これは* TB *サイズのファイルには当てはまりません:)。 – CristiFati

+0

何が問題なのですか?エラーや間違った出力が出ていますか?それがCRLFの場合、 ''\ n' 'の代わりに' '\ r \ n' 'が必要な場合があります。ファイルを文字列と置換文字に読み取ることもできます。 'contents = file_in.read()。replace( ';'、 '; \ r \ n')' – pault

+0

また、 'currentChar:ではない間はあまり意味がありません。キャラクターが存在しない場合は、そのキャラクターを処理したいだけですか? – glibdud

答えて

1

CristiFatiさんのコメントで述べたように、あなたは、ファイルを読んで、それを閉じてから、書き込みのためにそれを開く必要があります。

import sys 

file_in = open(sys.argv[1],'r') 
content = file_in.read() 
file_in.close() 
file_out = open(sys.argv[1],'w') 
file_out.write(content.replace(';',';\n')) 
file_out.close() 

必要に応じてあなたはドンように異なるものにするために、出力ファイル名を変更することができます元のファイルを上書きしません。

関連する問題