我是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*此处添加了带有行的列,以简化解释。
我需要计算第二列,该列接受来自列-1的输入数据,并输出从上一列减去此行值的结果(如果行-1(列-1)值为0,则行-1(列-2)中的值也应为0)。它应该是:
让我向您展示输出文件应该是什么样的:
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适合这个任务?我在这方面不强(基本上,我一点也不知道),我应该学吗?
不管怎样,我真的很感谢你的贡献。
发布于 2015-09-10 14:24:41
我相信这会像你要求的那样:
INPUT = 'file.txt'
OUTPUT = 'calc.txt'
def main():
with open(INPUT, 'r') as reader, open(OUTPUT, 'a') as writer:
last_value = 0
for line in reader:
column_1, *remaining_columns = map(float, line.split())
column_2 = column_1 - last_value
last_value = column_1
print(column_1, column_2, sep='\t', file=writer)
if __name__ == '__main__':
main()发布于 2015-09-10 14:30:02
一种方法可以是:假设您有两个列表:
a = [1,2,3,0]
b = [0,1,2,3]然后,您可以使用以下步骤从另一个列表中减去一个列表:
import operator
map(operator.sub, a, b)要做到这一点,您需要将文件读取为数组(使用array.append(value)获取所有数据)。
然后复制一份数据,并将其偏移一份(列表长度必须相同)。如何处理数组的开始和结束取决于这些值对您的重要性(也许您可以承担损失一个值的代价)。
发布于 2015-09-10 14:34:33
下面是一个使用列表理解和压缩的解决方案:
#!/usr/bin/env python3
with open('file.txt', "r") as f:
# read column one into a list
column_1 = [float(line.strip()) for line in f]
# compute differences of neighbouring values
column_2 = [now - last for now, last in zip(column_1, [0.0]+column_1[:-1])]
with open("result.txt", "w") as outfile:
for c1, c2 in zip(column_1, column_2):
print("{:.2f}\t{:.2f}".format(c1, c2), file=outfile)这里要做的是,我们首先从输入文件中创建一个所有条目的列表。通过使用zip,我们可以通过两个(或更多)迭代创建元组。我们必须创建第二个列表,其值移动1,并在前面添加0.0作为第一个条目的哨兵。
现在,我们可以将这两个列表压缩在一起,并使用第二个列表理解来计算值对之间的差异。
学习numpy总是一个好主意,但我认为这对这项任务来说太费劲了。
https://stackoverflow.com/questions/32504143
复制相似问题