【发布时间】:2023-03-31 22:03:01
【问题描述】:
我对 Python 还是很陌生。我有一个包含大量数据的大型制表符分隔文本文件,我正在尝试从第 18 列和第 22 列中获取值并进行名为“rate”的计算,然后我想将其附加到文本中每一行的末尾文件。
我似乎无法对此进行任何尝试。我的尝试如下所示,但我总是会收到一个错误(在我的代码下方显示的输出中)。
with open(fieldDataFile, 'rw') as f:
lines = f.readlines()[1:]
for i, line in enumerate(lines):
ratecalc = (float(lines[i+1][21]) - float(lines[i][21]))/(float(lines[i+1][17]) - float(lines[i][17]))
line[i] = line[i].strip() + str(ratecalc)
for line in lines:
f.write(line)
输出:
ValueError: could not convert string to float: n
我在第 18 或 22 列中根本找不到任何字母,所以我不知道这个转换错误来自哪里。即使代码有效,我也不确定它是否真的会附加该值。
非常感谢任何帮助!谢谢!
编辑:我尝试打印出我需要使用的行:
print fieldDataFile
with open(fieldDataFile, 'rw') as f:
lines = f.readlines()[1:]
for i, line in enumerate(lines):
print (lines[i][21])
print (lines[i+1][21])
print (lines[i][17])
print (lines[i+1][17])
结果:
n
n
i
i
虽然根据文件中的数据,应该是:
1452.1
1509.5
0
5.52
很遗憾,由于该文件是专有文件,因此我无法共享标题或更多信息,因此我知道这很难提供帮助。但是,我没有注意到它有什么特别的问题,因为它与任何其他文件一样具有标题,并且在每个文件下方都有以制表符分隔的格式的数字列。
【问题讨论】:
-
您是否尝试过打印出
lines[i+1][21]、lines[i][21]、lines[i+1][17]和lines[i][17]?这是调试的第一步。它会告诉您您对数据所做的假设是否正确。根据错误消息,其中一个的值为“n”。 -
显然,第 21 列的所有内容都有“n”,第 18 列的所有内容都有“i”,这是没有意义的,因为这绝对不是我文件中的内容。我将不得不进行调查,因为我不允许在这里发布我的文本文件。
-
您也可以打印出
line的值,这将帮助您判断您是否正在阅读正确的文件。 -
是的,它正在读取正确的文件,但是数据列太多,行以包装格式显示。也许这会导致错误?
-
这取决于您所说的“换行”是什么意思。如果它只是被你用来查看数据的任何东西所包裹,不,没关系。如果数据在文件中有物理换行符,导致您认为应该是一行数据在文件中是两行物理行,这很重要。
标签: python python-3.x