2013-04-27 49 views
1

我有一个4列x 180.000行的数据文件。我希望根据第3列中的值在特定时间间隔内的标准,即最小值<第3列值<最大值,选择要保存到新文件的整行数据。如何选择数据行

任何想法如何做到这一点?

+0

你可以让Python执行一条SQL语句,将这行插入到另一个表中。阅读Python如何与SQL数据库进行通信。你的实际条件标准并不是很清楚地表达出来的。 – Tim 2013-04-27 12:20:01

+0

到目前为止您尝试过什么?该文件的格式是否适合'csv'模块? – 2013-04-27 12:20:08

+1

@Tim:如果需要写出新文件,则不需要使用SQL。您需要阅读整个文件*反正*,因此您可以逐行过滤并写出匹配的行。 – 2013-04-27 12:20:28

回答

3

使用csv module读写,那么就过滤:

with open(inputfilename, 'rb') as inputfile, open(outputfile, 'wb') as outputfile: 
    reader = csv.reader(inputfile) 
    writer = csv.writer(outputfile) 

    for row in reader: 
     if minval <= int(row[2]) <= maxval: 
      writer.writerow(row) 
+0

这会很好,但他的数据格式不可能与csv模块一起工作。 – 2013-04-27 12:24:34

+0

可能性在那里,但考虑到OP知道它是整个文件中的4列,它很可能会工作。答案很容易根据大多数格式进行调整,否则一个快速的'.split(..)'也许有一些剥离会为其余的99%做好准备。 – 2013-04-27 12:26:04

+0

这是真的。您也可能需要添加一个分隔符,具体取决于csv的格式。我想我们只能等待一些更多的信息。 – 2013-04-27 12:27:36

1

可以用简单的CSV读/写来完成。 可以更优雅地使用Numpy以矢量化的形式完成,而且由于行数很大,Numpy可能会快得多。

import numpy as np 
#Load file into a 'MATRIX' 
data=np.loadtxt('name_of_delimited_file.txt') 
# Find indices where the condition is met 
idx_condition_met=(data[:,2] > min) & (data[:,2] < max) 
np.savetxt('output.txt', data[idx_condition_met], delimiter=',')