2017-05-15 8 views
0

に余分な列を追加します。私は今、何をしたいか私はこのようになりますテキストファイル持っているワードファイル

1 0.0 
2 0.2 
3 0.4 

することは、特定の値がしきい値の間にあるかどうかをチェックして、行に何かを追加することです。値は0.1であり、それにより、0と0.2との間に「1」が追加されるべきであり、出力がなければならないのであれば:私は1を書き込む方法について

#open doc 
doc = "sample_name.txt" 
f = open(doc, "r") 
lines = l.readlines() 

count = 1 
for line in lines: 

elements = line.split(" ") 
start_time = elements[1] 

#get element from next line 
next_line = lines[count] 
elements_new_line = next_line.split(" ") 
end_time = element_new_line[1] 

if i >= end_time and i <= start_next_time: 
    #add a one the file 
#increase counter 
count = count + 1 

任意の考え:

1 0.0 1 
2 0.2 
3 0.4 

私はこれを試みました.txtファイル

+0

をいくつかの例を少し説明してください。 –

答えて

0

厳密に言えば、テキストファイルの行末に値を追加することは、一般的には簡単ではありません。これは、行に1文字だけを追加すると、ファイル内の他のすべての文字が右側に「プッシュ」されるためです。通常、入力ファイルの行を読み込み、必要に応じて文字を追加または変更し、出力ファイルに書き込むのが望ましい方法です。あなたの場合、入力ファイルは破棄され、出力ファイルはその場所に置かれます。

withのインデントを終了すると自動的に閉じられるように、入力ファイルと出力ファイルを開くときにwithを使用するように次のコードを書いています。これは、ファイルを処理するための好ましい方法です。

私は、firstsecondという2つの値しかないと仮定しています。私はstripを使って、各行の最後に改行文字または改行文字を削除しました。私はを使って入力値をテストします。浮動小数点値との比較を行うには、読み込み文字を浮動小数点に変換する必要があることに注意してください。

withを終了すると、ストアには2つのファイルがあります。私はオリジナルを破棄し、新しいバージョンの名前をオリジナルの名前に変更します。

with open('sample_name.txt') as sample, open('temp.txt', 'w') as temp: 
    for line in sample: 
     first, second = line.strip().split() 
     if 0 <= float(second) < 0.2: 
      temp.write('%s %s 1\n' % (first, second)) 
     else: 
      temp.write('%s %s\n' % (first, second)) 

from os import remove, rename 

remove('sample_name.txt') 
rename('temp.txt', 'sample_name.txt') 
+0

'line.strip()。split()!= line.split()'のような状況は考えられませんが、おそらく 'strip()'を教育目的ですか? –

+0

@StevenRumbalski:あなたはもちろんです。ちょっとした「ベルトとブレース」。 –

0

修正されたファイルを書き込んで元のファイルに上書きします。

import os 
fname = "sample_name.txt" 
temp_fname = fname + ".tmp" 
with open(fname, 'r') as fin, open(temp_fname, 'w') as fout: 
    for line in fin: 
     parts = line.split() 
     if 0 < float(parts[1]) < 0.2: 
      parts.append("1") 
      fout.write(' '.join(parts) + '\n') 
     else: 
      fout.write(line) 
os.remove(fname) 
os.rename(temp_fname, fname) 

あなたの代わりに常にあなたのforループを変更する(条件が通過すると、それがないときのために'0''1'追加)ライン変更する場合:あなたでした

for line in fin: 
     parts = line.split() 
     parts.append("1" if 0 < int(parts[1]) < 0.2 else "0") 
     fout.write(' '.join(parts) + '\n') 
関連する問題