Eu tenho um arquivo CSV com cerca de 2000 registros.
Cada registro possui uma sequência e uma categoria:
This is the first line,Line1
This is the second line,Line2
This is the third line,Line3
Eu preciso ler este arquivo em uma lista que se parece com isso:
data = [('This is the first line', 'Line1'),
('This is the second line', 'Line2'),
('This is the third line', 'Line3')]
Como importar esse CSV para a lista que eu preciso usar Python?
csv
módulo: docs.python.org/2/library/csv.htmlRespostas:
Usando o módulo csv :
Resultado:
Se você precisar de tuplas:
Resultado:
Resposta antiga do Python 2, também usando o
csv
módulo:fonte
b
faz com que o arquivo seja aberto no modo binário, em oposição ao modo de texto. Em alguns sistemas, o modo de texto significa que\n
será convertido em uma nova linha específica da plataforma ao ler ou escrever. Veja documentos .Atualizado para Python 3 :
Resultado:
fonte
'r'
é o modo padrão, portanto, especificá-lo é desnecessário. Os documentos também mencionam Se csvfile é um objeto de arquivo, ele deve ser aberto com newline = ''.Pandas é muito bom em lidar com dados. Aqui está um exemplo de como usá-lo:
Uma grande vantagem é que os pandas lidam automaticamente com as linhas do cabeçalho.
Se você nunca ouviu falar de Seaborn , recomendo dar uma olhada.
Consulte também: Como leio e escrevo arquivos CSV com Python?
Pandas # 2
O conteúdo de df é:
O conteúdo dos ditados é
Pandas # 3
O conteúdo de
lists
é:fonte
tuples = [tuple(x) for x in df.values]
pode ser escrito em seutuples = list(df.itertuples(index=False))
lugar. Observe que os documentos do Pandas desencorajam o uso de a.values
favor de.to_numpy()
. O terceiro exemplo é confuso para mim. Primeiro, porque a variável é nomeadatuples
, o que implicaria que seja uma lista de tuplas, enquanto na verdade é uma lista de listas. Segundo, porque, até onde eu sei, toda a expressão pode ser substituída pordf.to_list()
. Também não sei se o segundo exemplo é realmente relevante aqui.Atualização para Python3:
Resultado:
Se csvfile for um objeto de arquivo, ele deverá ser aberto com
newline=''
.módulo csv
fonte
list(map())
sobre uma lista de compreensão? Observe também o espaço em branco no início de cada elemento da segunda coluna.Se você tiver certeza não há vírgulas em sua entrada, além de separar a categoria, você pode ler o arquivo linha por linha e dividida em
,
, em seguida, empurre o resultado paraList
Dito isso, parece que você está vendo um arquivo CSV, então você pode considerar usar os módulos para ele
fonte
fonte
.read().splitlines()
, você pode iterar diretamente cada linha do arquivo:for line in in_file: res.append(tuple(line.rstrip().split(",")))
Além disso, observe que usar.split(',')
significa que cada elemento da segunda coluna começará com espaço em branco extra.line.rstrip()
->line.rstrip('\n')
.Como já foi dito nos comentários, você pode usar a
csv
biblioteca em python. csv significa valores separados por vírgula, que parecem exatamente o seu caso: um rótulo e um valor separados por uma vírgula.Sendo um tipo de categoria e valor, prefiro usar um tipo de dicionário em vez de uma lista de tuplas.
De qualquer forma, no código abaixo, mostro os dois lados:
d
é o dicionário el
é a lista de tuplas.fonte
(row[0], row[1])
mais fraco / propenso a erros do que apenas o usotuple(row)
?Um loop simples seria suficiente:
fonte
Infelizmente, acho que nenhuma das respostas existentes é particularmente satisfatória.
Aqui está uma solução Python 3 direta e completa, usando o módulo csv .
Observe o
skipinitialspace=True
argumento. Isso é necessário, pois, infelizmente, o CSV do OP contém espaço em branco após cada vírgula.Resultado:
fonte
Estendendo um pouco seus requisitos e assumindo que você não se importa com a ordem das linhas e deseja agrupá-los em categorias, a seguinte solução pode funcionar para você:
Dessa forma, você obtém todas as linhas relevantes disponíveis no dicionário, sendo a categoria a chave.
fonte
Aqui está a maneira mais fácil no Python 3.x de importar um CSV para uma matriz multidimensional e suas únicas 4 linhas de código sem importar nada!
fonte
A seguir, é um pedaço de código que usa o módulo csv, mas extrai o conteúdo file.csv para uma lista de dictos usando a primeira linha, que é um cabeçalho da tabela csv
fonte
csv.DictReader
?