Перейти к основному содержимому

Работа с файлами Pyhton

csv файлы

подробнее про csv модуль

CSV файлы, предпочтительно хранить в формате, (dialect) - excel. С разделителем столбцов табуляцией \t.

Потому, что такие файлы:

  • проще понимается xls читалками.
  • легче читается человеком
  • проще ичпользовать cut в unix ситемах и администрировать логи девопсам. Чеее?

В общем, раз у пошла такая практика, то

Чтение csv

import csv

with open('log_ip.csv') as f:
tab_reader = csv.reader(f, dialect='excel-tab')
for row in tab_reader:
print(row)

Если файл в excel формате, когда колонки разделены не запятыми а символами TAB, в обьект reader, можно добавить dialect 'excel-tab'

При чтении:

# tab delimiter excet_tab
tab_reader = csv.reader(f, dialect='excel-tab')

# or tab delimiter
tab_reader = csv.reader(f, delimiter="\t")

Запись в csv

import csv

with open('pased_site.csv', 'w', encoding="utf-8:") as f:
a_pen = csv.writer(f)
a_pen.writerow(('sep=', ' '))
a_pen.writerow(('Title', 'Descrition', 'H1', 'url'))
for table in tables:
try:
a_pen.writerow((table['Title'], table['Descrition'],
table['H1'], table['url']))
except Exception:
continue

Для записи в в excel формате 'excel-tab' добавляем в обьект writer

# tab delimiter excet_tab
a_pen = csv.writer(f, dialect='excel-tab')

# or tab delimiter
a_pen = csv.writer(f, delimiter="\t")

Примеры работы с csv файлами в официальной документации.

json файлы

Чтение json

Чтение данных из json файла:

import json

# Load data from json file
with open('file_name.json', 'r') as f:
serieses = json.load(f)

Запись в json

Запись данных в json файл:

import json

# Save data to json file
with open('file_name.json', 'a') as f:
json.dump(res, f, indent=4, ensure_ascii=False)
  • indent=4 - делать отступы (4 пробела). Для понятного форматирования
  • ensure_ascii=False - писать в человекочитаемом формате.

Плоские файлы

Чтение и запись данных из обыкновенных (плоских) файлов txt, html и т.д.:

Чтение из файла:

# Load data from file
with open('index.html', 'r') as f:
html = f.read()

Сохранение в файл

Простое сохранение в файл

# Save data to file
with open('index.html', 'w') as f:
f.write(res.text)

Сохранинение list или dict в плоский файл построчно:

# Save list to file
myList = [1,2,3,4]

with open('output.txt', 'w') as f:
f.write('\n'.join(str(i) for i in myList))

Асинхронный доступ

Для асинхронного доступа к файловой системе есть модуль aiofiles

модуль предварительно установить: КЭП?

pip install aiofiles

Пример сохранения в файл:

import asyncio
import aiofiles # pip install aiofiles

async def saver():
async with aiofiles.open('test.txt', 'a') as f:
await f.write("Ole ole")

asyncio.run(saver())

Пути

Получить путь к текущей дериктории

from os.path import dirname, abspath

# get current dir
cur_dir = dirname(abspath(__file__))