【问题标题】:Appending Calculated Value to each row将计算值附加到每一行
【发布时间】: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


【解决方案1】:

我不能将此作为评论,但这里有一条帮助解决问题的建议。

读取一小段数据并在您感兴趣的列/字段上使用 type() 以确保没有空格或其他被识别为字符串的隐藏字符。如果是,请仔细查看数据。如果你能发布一小部分,我相信这里的人会很快提供帮助。

【讨论】:

  • 显然,第 21 列的所有内容都有“n”,第 18 列的所有内容都有“i”,这是没有意义的,因为这绝对不是我文件中的内容。我将不得不进行调查,因为我不允许在这里发布我的文本文件。我将不得不继续调查。
【解决方案2】:

正如输出所建议的,您可能在文本文件中选择了一个字符“n”。试着打印出 ratecalc 看看你得到了什么。然后从那里出发。

【讨论】:

    【解决方案3】:
    1. 按照建议,尝试打印出ratecalc 的组件
    2. 在使用 print 进行调试时,删除 float()s 并查看打印的值是什么
    3. 通过使用i+1,在最后一行你的循环尝试读取lines[i+1](因为你已经在最后一行,所以它不存在)
    4. 另外,n 可能是文件中错误的某种剩余换行符 (\n)

    您也可以进行类似于Get Line Number of certain phrase in file Python 接受的答案的查找:

    lookup = 'n'
    
    with open(filename) as myFile:
        for num, line in enumerate(myFile, 1):
            if lookup in line:
                print 'found at line:', num
    

    【讨论】:

    • 好的,我会尝试用这个查找'n'和'i'值。文件本身充满了数字,所以我不知道它在哪里找到这些字符串。编辑:显然 'n' 在使用上述代码的每一行中。我很困惑,它们都是数字......
    • 请在文本编辑器中打开 fieldDataFile 并将前 3 行粘贴到您的问题中
    • 很遗憾,我不能在我工作的地方发布它。
    • 那么,祝你调试顺利!
    【解决方案4】:

    原来是分割线的问题。出于某种原因,我不得不指定制表符分隔符,并且它起作用了。感谢您的帮助!

    with open(fieldDataFile, 'r') as f:
        lines = f.readlines()[1:]
        for i in range(len(lines[:-1])):
            status=0
            try:
                curralt= float(lines[i].split('\t')[21])
                currtime= float(lines[i].split('\t')[17])
                nextalt= float(lines[i+1].split('\t')[21])
                nexttime= float(lines[i+1].split('\t')[17])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-22
      • 1970-01-01
      • 2016-09-02
      • 1970-01-01
      • 1970-01-01
      • 2015-12-11
      • 2011-05-03
      相关资源
      最近更新 更多