2017-07-31 42 views
-1

我在csv文件多行,并且每个`线看起来像这样提取值

0.10089;0;0;1;0;0;0;0;0;0;-0.9;-0.35;999999;0;0;0;80;81.226;158.25;0; 

我不得不更换值-0.9-0.35并通过999999这些2*值,-0.9成为-1.8 ...

我已经宣布,存储所有出现在每一个line

分号的索引数组,

sc_pos_array = [i for i,x in enumerate(line) if x == ';']

我知道值0.910th分号后发生的,我知道10th分号从sc_pos_array[9]索引。要访问0.9,我接着写

​​

但这似乎并没有工作。我做这一切以下for循环内

with fileinput.input(inplace=True) as f: for line in f: ...

+0

目前尚不清楚“似乎不起作用”的含义,但我强烈建议改变您的方法。你会发现使用现有工具比如'csv'模块更容易。 –

回答

0

要访问值0.9:

line[sc_pos_array[9]+1 : sc_pos_array[10]] 

下面的代码替换值-0.9和字符串中substitues其2倍值返回:

line = line[0:sc_pos_array[9] + 1] + str(2 * float(line[sc_pos_array[9]+1 : sc_pos_array[10]])) + line[sc_pos_array[10]:] 
print line 

因此,输出为:

'0.10089;0;0;1;0;0;0;0;0;0-1.8;-0.35;999999;0;0;0;80;81.226;158.25;0;' 
+0

谢谢!它适用于大部分,但不是-1.8,它显示0-1.8 –

+0

@Andandwivedi你是正确的。我更新了解决方案。获得第九名';'你需要去i + 1指数。 –

+0

现在我使用'python3 script.py file.csv'运行脚本。我试图用'argparse'来询问用户他们想要乘以的数字(而不是显式地使用2)。ap.add_argument(“ - m”,“--multiplier”,required = True,help = “number to multiply with x,y,z values”) args = vars(ap.parse_args())''然后用'args [“multiplier”]'代替'2',但这似乎不是去工作 –