我有一个.txt文件,里面装满了我想过滤的数据(大约5800行),因为有些行是重复的,唯一的区别是时间戳正好是2小时后。那些是副本的最新版本的行(例如附件中的第一行)应该被忽略。所有其他行应保留在中,并写入新的.txt文件。你知道吗
1_3_IMM 2016-07-19 16:11:56 00:00:40 2 Sensor Check # should go
1_3_IMM 2016-07-19 14:12:40 00:00:33 2 Sensor Check # should stay
1_3_IMM 2016-07-19 14:11:56 00:00:40 2 Sensor Check # should stay
1_3_IMM 2016-07-19 16:12:40 00:00:33 2 Sensor Check # should go
1_4_IMM 2016-07-19 17:23:25 00:00:20 2 Sensor Check # should stay
1_4_IMM 2016-07-19 19:23:25 00:00:20 2 Sensor Check # should go
1_4_IMM 2016-07-19 19:15:24 00:02:21 2 Sensor Check # should stay
1_4_IMM 2016-07-19 19:25:13 00:02:13 2 Sensor Check # should stay
我用Python写了一些代码,输出是一个.txt文件,只有一行文本:
deleted
我好像解决不了这个问题。你能帮忙吗?参见下面的代码。你知道吗
import os
def filter_file():
with open("output.txt", "w") as output:
#open the input file from a specified directory
directory = os.path.normpath("C:/Users/sande_000/Documents/Python files")
for subdir, dirs, files in os.walk(directory):
for file in files:
if file.startswith("input"):
input_file=open(os.path.join(subdir, file))
#iterate over each line of the file
for line in input_file:
machine = line[0:7] #stores machine number
date = line[8:18] #stores date stamp
time_1 = int(line[19:21]) #stores hour stamp
time_2 = int(line[22:24]) #stores minutes stamp
time_3 = int(line[25:27]) #stores second stamp
#check current line with other lines for duplicates by iterating over each line of the file
for otherline in input_file:
compare_machine = otherline[0:7]
compare_date = otherline[8:18]
compare_time_1 = int(otherline[19:21])+2
compare_time_2 = int(otherline[22:24])
compare_time_3 = int(otherline[25:27])
#check whether machine number & date/hour+2/minutes/seconds stamp are similar.
#If yes, write 'deleted' to output.txt and stop comparing lines.
#If no, continue with comparing next line.
if compare_machine == machine and compare_date == date and compare_time_1 == time_1 and compare_time_2 == time_2 and compare_time_3 == time_3:
output.write("deleted"+"\n")
break
else:
continue
#If no overlap between one line with any other line from the file, write that line to output.txt since it is no duplicate.
output.write(line)
input_file.close()
if __name__ == "__main__":
filter_file()
我认为这个较短的代码应该可以做到这一点。 Is有两个连续的循环,而不是嵌套的循环,这样可以提高性能。你知道吗
我相信下面的代码是有效的。注意,如果由于
datetime
不支持超过微秒的分辨率,记录的最小三个时间分量(毫秒、微秒、纳秒)有任何变化,则此代码将不起作用。在你的例子中,这不会有什么不同。你知道吗测试输入目录的结构:
input_1.txt
:input_2.txt
:output.txt
执行后:为方便起见,请复制以下预期输出:
相关问题 更多 >
编程相关推荐