2017-05-15 84 views
0

我有一個文本文件,它看起來像這樣:一個額外的列添加到Word文件

1 0.0 
2 0.2 
3 0.4 

我想現在要做的是檢查特定值是否是閾值之間,然後添加一些行。因此,如果值是0.1和0和0.2之間,從而「1」應該被添加並輸出應爲:

1 0.0 1 
2 0.2 
3 0.4 

我嘗試這樣做:

#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到.txt文件

+0

莫非你解釋一點點..舉一些例子 –

回答

0

嚴格地說,在文本文件中將行添加到行尾通常並不容易。這是因爲將一個字符添加到一行中涉及將該文件中的所有其他字符「推」到右側。通常,首選的方法是讀取輸入文件的行,根據需要向這些行添加或修改字符,並將它們寫入輸出文件。在你的情況下,輸入文件可以被丟棄,並且輸出文件放在它的位置。

我打開輸入和輸出文件時,寫了下面的代碼來使用with,以便它們在退出with的縮進時自動關閉。這是現在使用文件的首選方式。

我的假設是每行只有兩個值,分別叫做firstsecond。我使用strip刪除每行末尾的換行符或回車符。我使用if來測試輸入值。您會注意到需要將字符讀取轉換爲浮點數以與浮點值進行比較。

退出with後,商店中有兩個文件。我放棄原件並將新版本重命名爲原件的名稱。

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) 

如果你不是想隨時修改線(加入'1'當條件通行證以及當它沒有一個'0')您的for循環更改爲:

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