【问题标题】:UnboundLocalError: local variable 'columns' referenced before assignmentUnboundLocalError:分配前引用的局部变量“列”
【发布时间】:2022-01-02 07:05:03
【问题描述】:

我正在尝试将一些结果文件拆分为列,但出现错误:

UnboundLocalError:赋值前引用了局部变量“列”

我对 Python 还很陌生,接下来我可以尝试什么?

这是我的脚本:

import numpy as np
import pandas as pd
import glob
import os
import matplotlib.pyplot as plt
#import cv2
from statsmodels.stats.proportion import proportion_confint


def readResults(resultsFile):
    
    data = []
    obsID = int(resultsFile.split('\\')[-1][:-4])
    
    with open(resultsFile, 'r') as r:
        for line in r:                  # Loop through each line
            if line[0] == '#':          # Skip any comment lines
                if line[1] == 'T':
                    line = line.rstrip().strip('#')
                    columns = line.split('\t')
                    columns.insert(2, 'frame')
                    columns.append('obsID')
                    
                continue
            
            line = line.rstrip().split('\t')
            line.append(obsID)
            data.append(line)
    
    df = pd.DataFrame(data, columns=columns)
    
    print(df.info)
    # Set variable data types
    df = df.astype({'frame':'int64',
                    'hit_flag':'int64',
                    'x':'int64','y':'int64',
                    'flip_flag':'int64',
                    'ImageFile':'str'
                    })
    
    return df

【问题讨论】:

    标签: python


    【解决方案1】:

    检查文件内容。

    您的错误是说line[1] =='T' 永远不会在line[0] == '#' 时为真。因此,columns 永远不会被定义。

    如果您真的想跳过 cmets,并且只为 未注释 行中第二个字符为 T 的行创建数据帧,则看起来像这样

    with open(resultsFile, 'r') as r:
        columns = None
        for line in r:                  # Loop through each line
            if line.startswith('#'):    # Skip any comment lines
                continue
            if line[1] == 'T':
                line = line.rstrip().strip('#')
                columns = line.split('\t')
                columns.insert(2, 'frame')
                columns.append('obsID')
                    
                
            line = line.rstrip().split('\t')
            line.append(obsID)
            data.append(line)
    
    if columns is not None:    
        df = pd.DataFrame(data, columns=columns)
    else:
        raise ValueError("No line has a second letter that equals 'T'")
    

    【讨论】:

      猜你喜欢
      • 2017-08-10
      • 2020-01-16
      • 2019-12-05
      • 2017-09-19
      • 2020-09-26
      • 2019-03-22
      • 2019-01-24
      • 2021-07-01
      • 2021-10-16
      相关资源
      最近更新 更多