我有一个看起来像这样的文本文件:
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
的缩进时自动关闭它们。现在,这是处理文件的首选方式。
我的假设是每行只有两个值为first
和second
。我使用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')
答案 1 :(得分: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')