道歉,如果这在其他地方得到解答,但我找不到(或者可能理解)任何看似我正在尝试做的事情......
我有一个大约的文件。 60000行和136列。从这里我想提取大约20列,并创建了一个实例变量来存储数据。然后根据几个列中的条目解析和剪切数据,并将其移动到实例变量的新副本以保持一致性。目前我正在为实例中的每一列执行此操作,并且我希望一次复制整行,但无法找到引用实例变量中的行的方法。我正在做和想做的事情的例子如下。
如果有人能指出我正确的方向或建议更好的方法做同样的事情(而不是使用实例变量),我将非常感激。
实例变量:
class Instance_Object:
###------------------------------------------------------------------
### __init__ Function to create the object
###
### Stores all the interesting parameters from the data
###------------------------------------------------------------------
def __init__(self):
self.a = []
self.b = []
self.c = []
# etc
当前主要代码:
result = pyf.open(datapath+data_filename)
header = result[1].header
file_data = result[1].data
data_a, data_b = Instance_Object(), Instance_Object()
data_a.a = file_data.VAR1
data_a.b = file_data.VAR2
data_a.c = file_data.VAR3
#(etc)
for i in range(len(data_a.a)):
if 0.0 <= data_a.a[i] <= 100.0:
if -1.0 <= data_a.b[i] <= 1.0:
data_b.a.append(data_a.a[i])
data_b.b.append(data_a.b[i])
data_b.c.append(data_a.c[i])
# etc
我想做什么:
for i in range(len(data_a.a)):
if 0.0 <= data_a.a[i] <= 100.0:
if -1.0 <= data_a.b[i] <= 1.0:
data_b.append(data_a[i])
# i.e. append the entire row from data_a into data_b whilst
# maintaining the structure
答案 0 :(得分:1)
不存储数据列,而是存储行列表。
您可以组合操作,而不是存储所有列,然后选择所需的列,然后筛选所需的行,
def file_to_rows(fname, line_to_row=None, row_filter=None, skip_header=False, mode="r"):
line_to_row |= lambda line: line
row_filter |= lambda row: True
with open(fname, mode) as inf:
for line in inf:
row = line_to_row(line)
if row_filter(row):
yield row
def line_to_row_items(items):
max_split = max(items) + 1
def fn(line):
row = line.split(None, max_split)
return [row[item] for item in items]
return fn
def row_filter(row):
return (
0. <= row[0] <= 100.
and -1. <= row[1] <= 1.
)
data = list(file_to_rows(
"mydata.txt",
line_to_row_items([0, 1, 4, 5, 6, 9, 10, 15, 18, 21]), # which columns to keep
skip_header = True
))