我正在尝试进行文件操作和重新分配,其中文件有4列,如:
该文件有2514行和4列,格式为:
1 -0.000000 0.000000 0
2 -0.000000 0.000000 0
3 -7.009116 58.185083 1
4 -7.009116 58.185670 1
5 -7.009799 58.185410 0
6 -7.009996 58.184643 1
7 -7.009997 58.186257 1
8 -7.012637 58.182443 1
9 -7.013223 58.182150 1
10 -7.010877 58.184203 1
我的目标是将文件加载到Python中,并根据我将设置为条件的x,y
设置值,将标志值更改为我想要的数字
表示从x=-7.00
到y=58.1
的{{1}}和变量y,然后将第4列更改为2(或3或4)
我想到了一些东西,但我不知道如何表达我提到的标准,然后用相同的格式编写一个新文件,但新标志。
63.5
答案 0 :(得分:1)
您可以使用NumPy花式索引来避免for循环并获得更好的性能以应用条件(EDIT2:我将x==-7.00
替换为基于容差的标准):
TOL = 0.001
crit1 = (abs((abs(x)-7.00))<TOL) & (y>=58.1) & (y<63.5)
flag[crit1] = 2
...
应用所有条件后,您可以直接打印data
x
,y
,z
和flag
实际上是原始2-D的视图数组data
:
np.savetxt('output_file_name', data)
编辑:完整代码的示例:
from numpy import *
a='' #x-coordinates
b='' #y-coordinates
data = loadtxt("battri.node")
nodes=data[:,0]
x=data[:,1]
y=data[:,2]
flag=data[:,3]
crit1 = (x==-7.00) & (y>=58.1) & (y<63.5)
flag[crit1] = 2
savetxt('output_file_name', data)
答案 1 :(得分:0)
您似乎不仅想要定义一组标准,还要定义行动/规则来对其采取行动。因此,我将它们定义为Python函数形式的一系列变换。
Python有first-class functions,因此您可以将函数作为参数传递给其他函数:
这样的事情:
data = [(1, 2.5, 1.0, 99),
(2, 7.0, 2.5, 99),
(3, 1.0, 2.5, 99)]
def transform1(nodes, x, y, flag):
if x == 7.0 and 0.0 < y < 5.0:
flag = 77
return nodes, x, y, flag
def transform2(nodes, x, y, flag):
if x == 1.0:
flag = 42
return nodes, x, y, flag
# Will be applied in order
transforms = [transform1, transform2]
result = []
for row in data:
for transform in transforms:
transformed = transform(*row)
result.append(transformed)
print result
输出:
[(1, 2.5, 1.0, 99),
(2, 7.0, 2.5, 99),
(3, 1.0, 2.5, 42)]
答案 2 :(得分:0)
这里似乎有几个问题。让我们从阅读数据开始:
Python的file
类有一个名为readlines()
的有用函数,它将返回一个包含文件中每一行的列表。 IE:
lines = []
with open('filename.txt') as file:
lines = file.readlines()
然后,您可以迭代此列表并将其转换为值元组,然后转换值:
transformed_data = []
for line in lines:
node, x, y, flag = line.split()
# Do transform on values here
transformed_data.append(' '.join([node, x, y, flag])
最后,您可以直接将数据写入文件:
with open('out_file.txt', 'w') as out_file:
file.write(transformed_data)
如果第一行是标题,则必须考虑到这一点,但这样做非常简单。查看documentation有关如何阅读/写入文件的更多信息。