Импорт данных в Python: от простых файлов до сложных структур

Раздел: Обработка данных -> Файловый ввод-вывод

Импорт данных в Python: обзор методов

Основное эффективное решение: использование библиотеки pandas

Для табличных данных (CSV, Excel, TSV) наиболее удобным и производительным инструментом является библиотека pandas. Она автоматически определяет типы столбцов, поддерживает пропуски данных, индексацию и фильтрацию.

Пример импорта CSV-файла:


import pandas as pd

df = pd.read_csv('data.csv', encoding='utf-8', sep=',')
print(df.head())

ввод программ на python (ввод данных в программе python)

Пояснение: функция read_csv принимает путь к файлу, явно указывается кодировка (utf-8) и разделитель (запятая). Метод head() выводит первые 5 строк.

Типичные ошибки и их решение:

  • UnicodeDecodeError при неверной кодировке. Решение: указать правильную кодировку, например encoding='cp1251'.
  • ParserError при некорректном разделителе. Решение: проверить разделитель в файле и указать его в параметре sep.
  • Потребление памяти при больших файлах. Решение: использовать параметр chunksize для чтения по частям.

Как прочитать обычный текстовый файл?

Встроенная функция open() позволяет читать любой текстовый файл. Рекомендуется использовать менеджер контекста with для автоматического закрытия файла.


with open('text.txt', 'r', encoding='utf-8') as f:
    content = f.read()
print(content[:100])

Python file io (ввод-вывод файлов в python)

Метод read() загружает весь файл в память. Для построчного чтения используется readlines() или итерация по файлу.

Проблема: при открытии файла с неверной кодировкой возникает UnicodeDecodeError. Способ решения: определить кодировку с помощью модуля chardet или перебрать популярные кодировки.

Как работать с CSV файлами без pandas?

Стандартный модуль csv предоставляет простые средства для чтения CSV. Подходит для небольших файлов или когда не требуется анализ данных.


import csv

with open('data.csv', 'r', encoding='utf-8') as f:
    reader = csv.reader(f, delimiter=',')
    for row in reader:
        print(row)

Python temp files (временные файлы в python)

Объект csv.reader возвращает итератор строк, каждая строка - список строк. Разделитель указывается явно.

Ошибка: если в данных есть кавычки, содержащие разделитель, модуль csv обрабатывает их корректно, но если файл не соответствует стандарту CSV, возникают ошибки. Решение: предварительно проверить формат или использовать csv.DictReader для словарей.

Как импортировать JSON данные?

Модуль json позволяет загрузить данные из JSON-файла. Результатом является Python-объект (словарь или список).


import json

with open('data.json', 'r', encoding='utf-8') as f:
    data = json.load(f)
print(type(data))
print(data.keys() if isinstance(data, dict) else data[0])

Python index files (индексация файлов в python)

Функция json.load() десериализует файл. Для строки используется json.loads().

Проблема: файл может содержать невалидный JSON, например, лишние запятые или комментарии. Решение: использовать библиотеку json5 или предварительно проверить файл на валидность с помощью json.loads().

Как загрузить данные из Excel?

Для Excel-файлов (xlsx) часто используется pandas.read_excel(), которая внутри применяет openpyxl или xlrd.


import pandas as pd

df = pd.read_excel('report.xlsx', sheet_name='Лист1', engine='openpyxl')
print(df.head())

File python class (класс для работы с файлами в python)

Можно читать конкретный лист по имени или индексу. Параметр engine позволяет выбрать библиотеку.

Ошибка: отсутствие библиотеки openpyxl вызывает ImportError. Решение: установить pip install openpyxl.

Также возможны проблемы с очень большими файлами – тогда рекомендуется использовать openpyxl напрямую с итерацией.

Как обрабатывать большие файлы построчно?

Для файлов, не помещающихся в память, применяется построчное чтение с помощью open() в цикле for line in f.


with open('large_data.csv', 'r', encoding='utf-8') as f:
    header = next(f)
    for line in f:
        # обработка строки
        pass

Сначала считывается заголовок, затем итерация по остальным строкам. При таком подходе в памяти находится только одна строка.

Проблема: если файл содержит нестандартные окончания строк, итерация может работать некорректно. Решение: указать newline='' в open() для управления переводом строк.

- Python copy file (копирование файла в python)
- Python log file (логирование в файл в python)
- Python file methods (методы работы с файлами в python)

Расширенные примеры импорта данных

Чтение CSV с разными разделителями и пропуском строк

Пример

import pandas as pd

# файл с разделителем ';' и пропущенными строками
# data.csv:
# id;name;value
# 1;Alice;10
# ;Bob;20
# 2;Charlie;;
df = pd.read_csv('data.csv', sep=';', skip_blank_lines=True, na_values=[''])
print(df)
   id     name  value
0   1    Alice   10.0
1 NaN      Bob   20.0
2   2  Charlie    NaN

Параметр na_values превращает пустые строки в NaN. skip_blank_lines игнорирует пустые строки.

Импорт JSON с вложенной структурой

Пример

import json

# data.json:
# {
#   "users": [
#     {"name": "Alice", "age": 30},
#     {"name": "Bob", "age": 25}
#   ],
#   "metadata": {"version": 1}
# }
with open('data.json', 'r', encoding='utf-8') as f:
    data = json.load(f)
users = pd.json_normalize(data['users'])
print(users)
    name  age
0  Alice   30
1    Bob   25

Функция json_normalize из pandas превращает список словарей в таблицу.

Чтение нескольких листов Excel

Пример

import pandas as pd

xls = pd.ExcelFile('report.xlsx', engine='openpyxl')
sheets = {}
for sheet_name in xls.sheet_names:
    sheets[sheet_name] = xls.parse(sheet_name)
print(sheets['Лист1'].head())
   A  B  C
0  1  2  3
1  4  5  6

Метод parse() читает лист в DataFrame. Словарь sheets хранит все листы.

Построчное чтение большого файла с обработкой

Пример

import csv

with open('huge_data.csv', 'r', encoding='utf-8', newline='') as f:
    reader = csv.reader(f)
    header = next(reader)
    for i, row in enumerate(reader, 1):
        if i > 10000:
            break
        # имитация обработки
        processed = [x.strip().upper() for x in row]

Используется csv.reader для корректного разбора строк с разделителями. Цикл прерывается после 10000 строк.

Чтение данных из буфера обмена (pandas)

Пример

import pandas as pd
# копируем текстовые данные в буфер обмена (например, из Excel)
df = pd.read_clipboard(sep='\t')
print(df)

Полезно для быстрого импорта небольших объёмов данных без сохранения файла.

Импорт с указанием типов столбцов

Пример

import pandas as pd

df = pd.read_csv('data.csv', dtype={'id': int, 'value': float})
print(df.dtypes)
id         int64
value    float64
dtype: object

Параметр dtype задаёт типы, что экономит память и ускоряет загрузку.

Импорт данных в Python - comments

En
Python импорт данных (python)