python - 在python中的CSV文件中添加两行
问题描述
我有一个包含数千行和 4-64 列的 csv 文件(我有大约 50 个 CSV 文件,列数可能因文件而异,但每个文件都有固定的列数)。例如
0 0 0 0 0 0 0\n
0 0 0 0 0 0 0\n
1 2 3 4 5 6 7\n
0 0 0 0 0 0 1\n
所以,我需要先对每一行求和,然后使用一些数学方程将两个连续的行相加。最好的pythonic方法是什么?我可以在新文件中写入新值。因此,新文件的行数将少于原始文件,因为它合并了两行的值。例如,CSV1 在对不同列求和后,第 1 行中的值为 0,第 2 行为 0。因此,新文件第 1 行将是 0+0 = 0,原始文件中的第三行 = 28,第 4 行 =1 所以,第 2 行在新文件中 = 28+1 = 29
解决方案
如果我理解您的问题,那么在 stdlib 的帮助下,您想要做的事情很容易。
首先,打开文件:
with open(path) as f:
然后附加 a csv.reader
,将其从可迭代的行转换为可迭代的行列表:
rows = csv.reader(f, delimiter=' ')
这些行中的每一行都是作为字符串的列列表。您显然需要将它们转换为int
或float
其他东西来对它们进行数学运算:
rows = (map(float, row) for row in rows)
现在您需要将其转换为可迭代的相邻行对。如果您查看docs中的Recipesitertools
,就会发现有一个pairwise
函数可以对任何可迭代对象执行此操作。但这很简单,只需手动执行:
it1, it2 = itertools.tee(rows)
next(it2)
pairs = zip(it1, it2)
现在,pairs
是成对的可迭代行。所以我们可以循环它:
for xrow, yrow in pairs:
我不确定你想对这些行做什么。也许你想要,我不知道,列的差异平方的平方根?无论你想要什么都应该很容易:
diffs = (x - y for x, y in zip(xrow, yrow))
sumsquares = sum(diff*diff for diff in diffs)
print(sumsquares**0.5)
这将打印出:
0.0
11.832159566199232
11.269427669584644
…我敢肯定这不是你想要的,因为你想做一些与我凭空挑选的数学不同的数学,但希望这显然是为什么这是结果,以及如何为你的使用相同的结构实际问题。
推荐阅读
- python - 熊猫将组分成第一个和最后一个值
- windows - 使用批处理脚本在列表中按索引引用元素
- reactjs - (ReactJS)每个可折叠元素的单独触发器(react-collapsible)
- java - 休眠升级后的Spring bootb absctractmethoderror
- c - 如何在 c 编程中处理一维数组的索引?
- react-native - ReferenceError: React 未定义 wix navigation react-native
- c# - 如何在 C# 中表示任何事件和任何函数?
- android-studio - 打开android studio时不断出错
- javascript - 如何在 React 无状态组件中更新 ES6 映射函数中的组件?
- awk - awk 变量在定义之前用于确定最长的行