尝试分析一些编码为文本文件的数据。此文本文件中的每一行都是一大堆结构化的数据,其中包含我需要的一些信息,因此我创建了一个遍历所有行并从中生成字典的函数,以提取所需的数据并为其添加标签。但是我在该函数中创建的字典无法识别,并显示以下错误:
Traceback (most recent call last):
File "TSE.py", line 43, in <module>
print(dic)
NameError: name 'dic' is not defined
我的代码是这样的:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import csv
with open('/path/to/Documents/Eleicoes 2018/Resultados/new2010.txt') as f:
df1 = [line.rstrip('\n') for line in f]
with open('/path/to/Documents/Eleicoes 2018/Resultados/new2012.txt') as f:
df2 = [line.rstrip('\n') for line in f]
with open('/path/to/Documents/Eleicoes 2018/Resultados/new2014.txt') as f:
df3 = [line.rstrip('\n') for line in f]
with open('/path/to/Documents/Eleicoes 2018/Resultados/new2016.txt') as f:
df4 = [line.rstrip('\n') for line in f]
lista = []
def extr(line):
dic = {}
dic['Ano'] = line[2]
dic['Turno'] = line[3]
dic['UF'] = line[5]
dic['UE_City_TSE'] = line[6]
dic['City_TSE'] = line[7]
dic['Municipio'] = line[8]
dic['Zona'] = line[9]
dic['Cargo_Cod'] = line[10]
dic['Candidato'] = line[14]
dic['Cargo_Come'] = line[15]
dic['COD_Apto'] = line[18]
dic['Apto'] = line[19]
dic['Situacao_COD'] = line[20]
dic['Situacao'] = line[21]
dic['Partido'] = line[23]
dic['Quantidade_Votos'] = line[28]
return dic
for i in range(len(df1)):
x = df1[i].split(';')
extr(line=x)
print(dic)
lista.insert(i,dic)
continue
print(lista[:5])
我知道这不是映射此数据的最佳方法,但是我在加载该文件以及使用numpy来构造一个数组时遇到了一些问题。因此,尽管有试探法,有人可以帮助我吗?当我没有定义一个函数,而是仅遍历行选择数据时,我需要所有字典都是相同的,即最后一行或第一行。在追加了在迭代中创建的字典之后,我尝试清理字典,但是当我这样做时,所有字典都是空的。如果您需要更多说明或认为我的启发式完全错误并且应该更改它,欢迎提出建议!谢谢!
答案 0 :(得分:0)
这是因为字典是在函数内部声明的。因此,它在该范围内是本地的,并且您没有将返回的值存储到变量中。在这里试试
for i in range(len(df1)):
x = df1[i].split(';')
dic = extr(line=x)
print(dic)
lista.insert(i,dic)
continue
答案 1 :(得分:0)
请在Python代码中使用缩进。 替换
extr(line=x)
使用
dic = extr(line=x)