개발/Python

Python csv에서 list 가져 오기

MinorMan 2021. 1. 8. 06:04
반응형

<질문>

약 2000 개의 레코드가있는 CSV 파일이 있습니다.

각 레코드에는 문자열과 카테고리가 있습니다.

This is the first line,Line1
This is the second line,Line2
This is the third line,Line3

이 파일을 다음과 같은 목록으로 읽어야합니다.

data = [('This is the first line', 'Line1'),
        ('This is the second line', 'Line2'),
        ('This is the third line', 'Line3')]

Python을 사용하여이 CSV를 필요한 목록으로 어떻게 가져올 수 있습니까?


<답변1>

사용csv module:

import csv

with open('file.csv', newline='') as f:
    reader = csv.reader(f)
    data = list(reader)

print(data)

산출:

[['This is the first line', 'Line1'], ['This is the second line', 'Line2'], ['This is the third line', 'Line3']]

튜플이 필요한 경우 :

import csv

with open('file.csv', newline='') as f:
    reader = csv.reader(f)
    data = [tuple(row) for row in reader]

print(data)

산출:

[('This is the first line', 'Line1'), ('This is the second line', 'Line2'), ('This is the third line', 'Line3')]

이전 Python 2 답변,csv기준 치수:

import csv
with open('file.csv', 'rb') as f:
    reader = csv.reader(f)
    your_list = list(reader)

print your_list
# [['This is the first line', 'Line1'],
#  ['This is the second line', 'Line2'],
#  ['This is the third line', 'Line3']]

<답변2>

업데이트파이썬 3:

import csv

with open('file.csv', newline='') as f:
    reader = csv.reader(f)
    your_list = list(reader)

print(your_list)

산출:

[['This is the first line', 'Line1'], ['This is the second line', 'Line2'], ['This is the third line', 'Line3']]

<답변3>

Pandas데이터를 잘 처리합니다. 다음은 사용 방법의 한 가지 예입니다.

import pandas as pd

# Read the CSV into a pandas data frame (df)
#   With a df you can do many things
#   most important: visualize data with Seaborn
df = pd.read_csv('filename.csv', delimiter=',')

# Or export it in many ways, e.g. a list of tuples
tuples = [tuple(x) for x in df.values]

# or export it as a list of dicts
dicts = df.to_dict().values()

한 가지 큰 장점은 pandas가 헤더 행을 자동으로 처리한다는 것입니다.

들어 본 적이 없다면Seaborn, 나는 그것을 보는 것이 좋습니다.

또한보십시오:How do I read and write CSV files with Python?

import pandas as pd

# Get data - reading the CSV file
import mpu.pd
df = mpu.pd.example_df()

# Convert
dicts = df.to_dict('records')

df의 내용은 다음과 같습니다.

     country   population population_time    EUR
0    Germany   82521653.0      2016-12-01   True
1     France   66991000.0      2017-01-01   True
2  Indonesia  255461700.0      2017-01-01  False
3    Ireland    4761865.0             NaT   True
4      Spain   46549045.0      2017-06-01   True
5    Vatican          NaN             NaT   True

dicts의 내용은

[{'country': 'Germany', 'population': 82521653.0, 'population_time': Timestamp('2016-12-01 00:00:00'), 'EUR': True},
 {'country': 'France', 'population': 66991000.0, 'population_time': Timestamp('2017-01-01 00:00:00'), 'EUR': True},
 {'country': 'Indonesia', 'population': 255461700.0, 'population_time': Timestamp('2017-01-01 00:00:00'), 'EUR': False},
 {'country': 'Ireland', 'population': 4761865.0, 'population_time': NaT, 'EUR': True},
 {'country': 'Spain', 'population': 46549045.0, 'population_time': Timestamp('2017-06-01 00:00:00'), 'EUR': True},
 {'country': 'Vatican', 'population': nan, 'population_time': NaT, 'EUR': True}]
import pandas as pd

# Get data - reading the CSV file
import mpu.pd
df = mpu.pd.example_df()

# Convert
lists = [[row[col] for col in df.columns] for row in df.to_dict('records')]

내용listsis :

[['Germany', 82521653.0, Timestamp('2016-12-01 00:00:00'), True],
 ['France', 66991000.0, Timestamp('2017-01-01 00:00:00'), True],
 ['Indonesia', 255461700.0, Timestamp('2017-01-01 00:00:00'), False],
 ['Ireland', 4761865.0, NaT, True],
 ['Spain', 46549045.0, Timestamp('2017-06-01 00:00:00'), True],
 ['Vatican', nan, NaT, True]]

<답변4>

import csv
from pprint import pprint

with open('text.csv', newline='') as file:
    reader = csv.reader(file)
    res = list(map(tuple, reader))

pprint(res)

산출:

[('This is the first line', ' Line1'),
 ('This is the second line', ' Line2'),
 ('This is the third line', ' Line3')]

csvfile이 파일 객체 인 경우 다음으로 열어야합니다.newline=''.
csv module


<답변5>

카테고리를 구분하는 것 외에 입력에 쉼표가없는 것이 확실한 경우 다음을 수행 할 수 있습니다.read the file line by linesplit의 위에,을 누른 다음 결과를List

즉, CSV 파일을보고있는 것 같으므로 사용을 고려할 수 있습니다.the modules그것을 위해


<답변6>

result = []
for line in text.splitlines():
    result.append(tuple(line.split(",")))

<답변7>

간단한 루프로 충분합니다.

lines = []
with open('test.txt', 'r') as f:
    for line in f.readlines():
        l,name = line.strip().split(',')
        lines.append((l,name))

print lines

<답변8>

이미 의견에서 말했듯이csv파이썬의 라이브러리. csv는 쉼표로 구분 된 값을 의미하며, 이는 귀하의 경우와 정확히 일치합니다. 레이블과 쉼표로 구분 된 값입니다.

카테고리 및 값 유형이기 때문에 튜플 목록 대신 사전 유형을 사용하고 싶습니다.

어쨌든 아래 코드에서 두 가지 방법을 모두 보여줍니다.d사전이고l튜플 목록입니다.

import csv

file_name = "test.txt"
try:
    csvfile = open(file_name, 'rt')
except:
    print("File not found")
csvReader = csv.reader(csvfile, delimiter=",")
d = dict()
l =  list()
for row in csvReader:
    d[row[1]] = row[0]
    l.append((row[0], row[1]))
print(d)
print(l)

<답변9>

불행히도 기존 답변 중 특별히 만족스러운 것은 없습니다.

다음은 간단하고 완전한 Python 3 솔루션입니다.csv기준 치수.

import csv

with open('../resources/temp_in.csv', newline='') as f:
    reader = csv.reader(f, skipinitialspace=True)
    rows = list(reader)

print(rows)

주목skipinitialspace=True논의. 불행히도 OP의 CSV에는 각 쉼표 뒤에 공백이 포함되어 있기 때문에 필요합니다.

산출:

[['This is the first line', 'Line1'], ['This is the second line', 'Line2'], ['This is the third line', 'Line3']]

<답변10>

요구 사항을 약간 확장하고 줄 순서에 신경 쓰지 않고 범주 아래에 그룹화하려는 경우 다음 솔루션이 적합 할 수 있습니다.

>>> fname = "lines.txt"
>>> from collections import defaultdict
>>> dct = defaultdict(list)
>>> with open(fname) as f:
...     for line in f:
...         text, cat = line.rstrip("\n").split(",", 1)
...         dct[cat].append(text)
...
>>> dct
defaultdict(, {' CatA': ['This is the first line', 'This is the another line'], ' CatC': ['This is the third line'], ' CatB': ['This is the second line', 'This is the last line']})

이렇게하면 키가 범주 인 사전에서 사용할 수있는 모든 관련 줄을 얻을 수 있습니다.


<답변11>

다음은 Python 3.x에서 CSV를 다차원 배열로 가져 오는 가장 쉬운 방법이며, 아무것도 가져 오지 않고 단 4 줄의 코드 만 있습니다!

#pull a CSV into a multidimensional array in 4 lines!

L=[]                            #Create an empty list for the main array
for line in open('log.txt'):    #Open the file and read all the lines
    x=line.rstrip()             #Strip the \n from each line
    L.append(x.split(','))      #Split each line into a list and add it to the
                                #Multidimensional array
print(L)

<답변12>

당신은 사용할 수 있습니다list()csv 리더 객체를 목록으로 변환하는 함수

import csv

with open('input.csv') as csv_file:
    reader = csv.reader(csv_file, delimiter=',')
    rows = list(reader)
    print(rows)

<답변13>

다음은 csv 모듈을 사용하지만 csv 테이블의 헤더 인 첫 번째 줄을 사용하여 file.csv 내용을 dict 목록으로 추출하는 코드입니다.

import csv
def csv2dicts(filename):
  with open(filename, 'rb') as f:
    reader = csv.reader(f)
    lines = list(reader)
    if len(lines) < 2: return None
    names = lines[0]
    if len(names) < 1: return None
    dicts = []
    for values in lines[1:]:
      if len(values) != len(names): return None
      d = {}
      for i,_ in enumerate(names):
        d[names[i]] = values[i]
      dicts.append(d)
    return dicts
  return None

if __name__ == '__main__':
  your_list = csv2dicts('file.csv')
  print your_list
반응형