我有一个数据集,行和列保存为制表符分隔的文本格式。我想根据列[x]是否具有特定值将此数据集划分为两个较小的数据集。
以下是数据集的示例(没有标题):dataset.txt
test1 abc 1
test2 efg 2
test3 hdh 1
test4 xyz 24
预期输出应如下所示:dataset1.txt
test1 abc 1
test3 hdh 1
dataset2.txt
test2 efg 2
test4 xyz 24
我想用import sys实现这个,这样我就可以输入原始数据集的文件名作为unix命令,并指定我想要的输出选项。在这种情况下,我将定义一个名为“unique”的选项来输出dataset1.txt,并选择一个选项“multi”来输出dataset2.txt。命令行应如下所示:
python code.py [option] [filename] > [output]
e.g。
python code.py unique dataset.txt > dataset1.txt
python code.py multi dataset.txt > dataset2.txt
这是我写的代码:
import sys
option = sys.argv[1]
filename = sys.argv[2]
options = ['unique','multi']
def out_unique(data):
for row in data:
if column[2] == 1:
print row
def out_multi(data):
for row in data:
if column[2] != 1:
print row
if option == 'unique':
out_unique(filename)
elif option == 'multi':
out_multi(filename)
else:
print 'available options:', options
这是我得到的错误:
Traceback (most recent call last):
File "out_if_col.py", line 23, in <module>
out_unique(filename)
File "out_if_col.py", line 13, in out_unique
if column[3] == 1:
NameError: global name 'column' is not defined
我知道这对于那里的专家来说可能看起来相当荒谬,但这是我第一次尝试在python中完成某些事情。说实话,我花了相当多的时间编写上面的代码,如果有人指出我的错误,我会很感激。
答案 0 :(得分:2)
您的脚本有更正:
import sys
option = sys.argv[1]
filename = sys.argv[2]
options = ['unique','multi']
def out_unique(data):
for row in data.readlines():
column = row.strip().split()
if column[2] == 1:
print row
def out_multi(data):
for row in data.readlines():
column = row.strip().split()
if column[2] != 1:
print row
if option == 'unique':
out_unique(open(filename, 'r'))
elif option == 'multi':
out_multi(open(filename, 'r'))
else:
print 'available options:', options
相同但有全面的清单(恕我直言看起来更加pythonic):
import sys
option = sys.argv[1]
filename = sys.argv[2]
options = ['unique','multi']
def out_unique(data):
print '\n'.join(row for row in data.readlines() if row.strip().split()[2] == '1')
def out_multi(data):
print '\n'.join(row for row in data.readlines() if row.strip().split()[2] != '1')
if option == 'unique':
out_unique(open(filename, 'r'))
elif option == 'multi':
out_multi(open(filename, 'r'))
else:
print 'available options:', options
答案 1 :(得分:1)
您需要将column
定义为当前行中值的列表,例如:
def out_unique(data):
for row in data:
column = row.strip().split()
if column[2] == 1:
print row
和
def out_multi(data):
for row in data:
column = row.strip().split()
if column[2] != 1:
print row