Чтение строк из файла CSV в Python
У меня есть файл CSV, вот пример того, как он выглядит:
Year: Dec: Jan:
1 50 60
2 25 50
3 30 30
4 40 20
5 10 10
Я знаю, как читать файл и печатать каждый столбец (например, ['Year', '1', '2', '3', etc]
). Но то, что я на самом деле хочу сделать, это прочитать строки, которые будут такими, как ['Year', 'Dec', 'Jan']
, а затем ['1', '50', '60']
и т.д.
И тогда я хотел бы сохранить эти числа ['1', '50', '60']
в переменных, чтобы потом их можно было вывести позже для ex.:
Year_1 = ['50', '60']
. Тогда я могу сделать sum(Year_1) = 110
.
Как я буду делать это в Python 3?
Ответы
Ответ 1
Вы можете сделать что-то вроде этого:
with open("data1.txt") as f:
lis = [line.split() for line in f] # create a list of lists
for i, x in enumerate(lis): #print the list items
print "line{0} = {1}".format(i, x)
# output
line0 = ['Year:', 'Dec:', 'Jan:']
line1 = ['1', '50', '60']
line2 = ['2', '25', '50']
line3 = ['3', '30', '30']
line4 = ['4', '40', '20']
line5 = ['5', '10', '10']
или:
with open("data1.txt") as f:
for i, line in enumerate(f):
print "line {0} = {1}".format(i, line.split())
# output
line 0 = ['Year:', 'Dec:', 'Jan:']
line 1 = ['1', '50', '60']
line 2 = ['2', '25', '50']
line 3 = ['3', '30', '30']
line 4 = ['4', '40', '20']
line 5 = ['5', '10', '10']
Edit:
with open('data1.txt') as f:
print "{0}".format(f.readline().split())
for x in f:
x = x.split()
print "{0} = {1}".format(x[0],sum(map(int, x[1:])))
# output
['Year:', 'Dec:', 'Jan:']
1 = 110
2 = 75
3 = 60
4 = 60
5 = 20
Ответ 2
Используйте модуль csv
:
import csv
with open("test.csv", "r") as f:
reader = csv.reader(f, delimiter="\t")
for i, line in enumerate(reader):
print 'line[{}] = {}'.format(i, line)
Выход:
line[0] = ['Year:', 'Dec:', 'Jan:']
line[1] = ['1', '50', '60']
line[2] = ['2', '25', '50']
line[3] = ['3', '30', '30']
line[4] = ['4', '40', '20']
line[5] = ['5', '10', '10']
Ответ 3
Чтение его по столбцам сложнее?
В любом случае это считывает строку и сохраняет значения в списке:
for line in open("csvfile.csv"):
csv_row = line.split() #returns a list ["1","50","60"]
Современное решение:
# pip install pandas
import pandas as pd
df = pd.read_table("csvfile.csv", sep=" ")
Ответ 4
import csv
with open('filepath/filename.csv', "rt", encoding='ascii') as infile:
read = csv.reader(infile)
for row in read :
print (row)
Это решит вашу проблему. Не забудьте указать кодировку.
Ответ 5
# This program reads columns in a csv file
import csv
ifile = open('years.csv', "r")
reader = csv.reader(ifile)
# initialization and declaration of variables
rownum = 0
year = 0
dec = 0
jan = 0
total_years = 0`
for row in reader:
if rownum == 0:
header = row #work with header row if you like
else:
colnum = 0
for col in row:
if colnum == 0:
year = float(col)
if colnum == 1:
dec = float(col)
if colnum == 2:
jan = float(col)
colnum += 1
# end of if structure
# now we can process results
if rownum != 0:
print(year, dec, jan)
total_years = total_years + year
print(total_years)
# time to go after the next row/bar
rownum += 1
ifile.close()
Немного поздно, но тем не менее... Вам нужно создать и идентифицировать файл csv с именем "years.csv":
Год Декабрь
1 50 60
2 25 50
3 30 30
4 40 20
5 10 10
Ответ 6
Это можно сделать с помощью библиотеки pandas
.
Пример:
import numpy as np
import pandas as pd
file = r"C:\Users\unknown\Documents\Example.csv"
df1 = pd.read_csv(file)
df1.head()
Ответ 7
Пример:
import pandas as pd
data = pd.read_csv('data.csv')
# read row line by line
for d in data.values:
# read column by index
print(d[2])
Ответ 8
Модуль csv
обрабатывает CSV файлы по строкам.
Если вы хотите обработать его по столбцу, pandas
- хорошее решение.
Кроме того, есть 2 способа получить все (или определенные) столбцы с простым простым кодом Python.
1. csv.DictReader
with open('demo.csv') as file:
data = {}
for row in csv.DictReader(file):
for key, value in row.items():
if key not in data:
data[key] = []
data[key].append(value)
Это легко понять.
2. csv.reader с почтовым индексом
with open('demo.csv') as file:
data = {values[0]: values[1:] for values in zip(*csv.reader(file))}
Это не очень понятно, но эффективно.
zip(x, y, z)
транспонируют (x, y, z)
, а x
, y
, z
являются списками.
*csv.reader(file)
сделать (x, y, z)
для zip
с именами столбцов.
Демо-результат
Содержание demo.csv
:
a,b,c
1,2,3
4,5,6
7,8,9
Результат 1:
>>> print(data)
{'c': ['3', '6', '9'], 'b': ['2', '5', '8'], 'a': ['1', '4', '7']}
Результат 2:
>>> print(data)
{'c': ('3', '6', '9'), 'b': ('2', '5', '8'), 'a': ('1', '4', '7')}