我想读取具有各种数字输入的数据文件,并希望每个条目的绝对值。数据文件有一个标题,我想跳过它。 到目前为止我的代码是:
import numpy as np
file = 'cps_1.dat'
content = np.genfromtxt(file,skiprows=6)
for i in content:
if content[i] < 0:
content[i] = content[i]*-1
out = open('workfile.dat', 'w')
for item in content:
out.write("%s\n" % item)
我的输出让我感到困惑,因为有些值被修改,但有些值却没有。有任何想法吗? 以下是我的输入和输出文件的前30行来展示问题:
输入
-14.369884
571.852281
571.852281
571.852281
571.852281
571.852281
571.852281
-3.987742
-344.416453
-568.752721
-568.752721
-568.752721
-568.752721
-568.752721
-568.752721
-568.752721
-568.752721
-568.752721
-568.752721
-568.752721
-347.725839
-89.10072
14.945966
-3.087168
-90.995559
-199.680855
-282.292899
-311.299381
-277.720216
-189.0793
输出
14.369884
571.852281
571.852281
571.852281
571.852281
571.852281
571.852281
3.987742
344.416453
568.752721
568.752721
568.752721
568.752721
568.752721
568.752721
568.752721
568.752721
568.752721
568.752721
568.752721
347.725839
89.10072
14.945966
3.087168
90.995559
199.680855
282.292899
-311.299381
-277.720216
189.0793
答案 0 :(得分:4)
问题是for i in content
遍历content
中的值(而不是索引!),但是您尝试将这些值用作索引。通常这应该为你的价值观点IndexError
,我很惊讶你没有提到它。
无论如何,如果您只想获得绝对值,请执行以下操作:
content = np.abs(content)
然后将content
写回您的文件。
答案 1 :(得分:1)
这一行:
for i in content:
应该是
for i in range(len(content)):
您想要迭代内容索引,而不是直接迭代列表中的数字。
答案 2 :(得分:1)
使用内置的abs(x)函数获取数字的绝对值。
这是处理列表的更好方法(并跳过前6行)。这使用list opject函数&#34; pop&#34;,从行的后面拉出每个数字,构建一个新列表。
file = '/tmp/input.dat'
with open(file) as f:
content = f.readlines()
content = content[6:]
new_list = []
while len(content) > 0:
new_list.insert(0, abs(float(content.pop())))
out = open('/tmp/workfile.dat', 'w')
for item in new_list:
out.write("%s\n" % item)