我是Python的初学者,无法应对我项目的其中一个时刻,所以我很乐意帮助我:)
让我们想象一下,我有一个* .txt文件,只有一列看起来像:
Column-1
row-1 0
row-2 25.00
row-3 27.14
row-4 29.29
row-5 31.43
row-6 33.57
*此处添加了带行的列,以简化说明 .
我需要计算从Column-1作为输入数据的第二列,并输出从前一行中减去该行值的结果(如果row-1(Column-1)值为0,则应该是它应该是第1行(第2列)中的0也是如此 . 应该是这样的:
-
row-2(Column-2)= row-2(Column-1) - row-1(Column-1)
-
row-3(Column-2)= row-3(Column-1) - row-2(Column-1),依此类推 .
让我告诉你输出文件应该如何:
Column-1 Column-2
row-1 0 0
row-2 25.00 25.00
row-3 27.14 2.14
row-4 29.29 2.15
row-5 31.50 2.21
row-6 33.57 2.07
现在我只在这里编程:
import sys
with open('file.txt', "r") as f:
sys.stdout = open('%s (calc).txt' % f.name, 'a')
for line in f:
column = line.strip().split()
Column_1 = float(column[0])
column.extend([None])
我不知道下一步该做什么 . 也许,numpy适合这项任务?我不坚强(基本上,我根本不知道),我应该学习它吗?
无论如何,我真的很感谢你的贡献 .
3 回答
这是一个使用列表推导和zip的解决方案:
这里发生的是我们首先从输入文件创建所有条目的列表 . 通过使用zip,我们可以从两个(或更多)可迭代创建元组 . 我们必须创建第二个列表,其值移动1并在前面添加0.0作为第一个条目的标记 .
现在我们可以将这两个列表压缩在一起,并使用第二个列表推导计算值对之间的差异 .
学习numpy总是一个好主意,但我认为这对于这项任务来说太过分了 .
我相信这会做你所问的:
一种方法可能如下:假设您有两个列表:
然后,您可以使用以下步骤从另一个列表中减去一个列表:
为此,您需要将文件作为数组读入(使用
array.append(value)
获取所有数据) .然后复制数据,并将其偏移一个(列表长度需要相同) . 如何处理数组的开头和结尾取决于这些值对您的重要程度(也许您可以承受损失一个值) .