Estou tentando ler as linhas de um arquivo de texto em uma lista ou matriz em python. Eu só preciso acessar individualmente qualquer item da lista ou matriz depois que ele é criado.
O arquivo de texto está formatado da seguinte maneira:
0,0,200,0,53,1,0,255,...,0.
Onde ...
está acima, o arquivo de texto real possui centenas ou milhares de itens a mais.
Estou usando o código a seguir para tentar ler o arquivo em uma lista:
text_file = open("filename.dat", "r")
lines = text_file.readlines()
print lines
print len(lines)
text_file.close()
A saída que recebo é:
['0,0,200,0,53,1,0,255,...,0.']
1
Aparentemente, ele está lendo o arquivo inteiro em uma lista de apenas um item, em vez de em uma lista de itens individuais. O que estou fazendo de errado?
Respostas:
Você precisará dividir sua string em uma lista de valores usando
split()
Assim,
fonte
.csv
arquivo (como mencionado pelo OP), por exemplo, um arquivo contendo os caracteres alfabéticos 3 por linha (a,b,c
,d,e,f
, etc.) e aplicar o procedimento descrito acima o que você começa é uma lista como esta:['a', 'b', 'c\nd', 'e', ... ]
(observe o item'c\nd'
). Eu gostaria de acrescentar que, o problema acima, sem distorção, esse procedimento recolhe dados de linhas individuais em uma única mega-lista, geralmente não o que eu quero ao processar um arquivo de dados orientado a registros.csv
módulo ou algum outro analisador existenteVocê também pode usar numpy loadtxt como
fonte
dtype : data-type
parâmetro. docs.scipy.org/doc/numpy/reference/generated/numpy.loadtxt.html Pandas read_csv é muito fácil de usar. Mas não vi uma maneira de especificar o formato para ele. Estava lendo carros alegóricos do meu arquivo, enquanto eu precisava de uma string. Obrigado @Thiru por mostrar o loadtxt.Então você quer criar uma lista de listas ... Precisamos começar com uma lista vazia
Em seguida, lemos o conteúdo do arquivo, linha por linha
Um caso de uso comum é o de dados colunares, mas nossas unidades de armazenamento são as linhas do arquivo que lemos uma a uma, portanto, convém transpor sua lista de listas. Isso pode ser feito com o seguinte idioma
Outro uso comum é dar um nome a cada coluna
para que você possa operar em itens de dados homogêneos
A maior parte do que escrevi pode ser acelerada usando o
csv
módulo, da biblioteca padrão. Outro módulo de terceiros é opandas
que permite automatizar a maioria dos aspectos de uma análise de dados típica (mas possui várias dependências).Atualização Enquanto no Python 2
zip(*list_of_lists)
retorna uma lista diferente (transposta) de listas, no Python 3 a situação mudou ezip(*list_of_lists)
retorna um objeto zip que não pode ser subscrito.Se você precisar de acesso indexado, poderá usar
que fornece uma lista de listas nas duas versões do Python.
Por outro lado, se você não precisa de acesso indexado e o que você deseja é apenas criar um dicionário indexado por nomes de colunas, um objeto zip é adequado ...
fonte
csv
módulo ...Esta pergunta está perguntando como ler o conteúdo do valor separado por vírgula de um arquivo em uma lista iterável:
0,0,200,0,53,1,0,255,...,0.
A maneira mais fácil de fazer isso é com o
csv
módulo da seguinte maneira:Agora, você pode facilmente iterar
spamreader
dessa maneira:Veja a documentação para mais exemplos.
fonte