# Files & Dirs

* [Python для сетевых инженеров. Работа с файлами](https://pyneng.readthedocs.io/ru/latest/book/07_files/index.html)
* [Файлы в python, ввод-вывод](https://pythonru.com/osnovy/fajly-v-python-vvod-vyvod)
* [Основы работы с файлами в Python](https://tproger.ru/articles/files-in-python/)

## Прочитати увесь файл  <a href="#obychno" id="obychno"></a>

### open / close

конструкція з open - така:

```python
f = open('path_to/file.txt', mode)
text = f.read()  # зчитує увесь файл в один великий рядок
f.close()
print(text)      # 'first string\nsecond string\nthird string\n...'
```

### with <a href="#with" id="with"></a>

Відмінність від `open()`:  з with python самостійно закриває файл, нема необхідності пам’ятати про це. Не викликаються виключення при відкритті файлу (наприклад, якщо файл не існує).

```python
with open('path_to/file', mode) as f:
    text = f.read()
```

### readlines

Корисна функція, яка зчитує рядки файлу **з** `\n` в список:

```python
f = open('r1.txt')
str_list1 = f.readlines()            # кожний ел-нт списку матиме на кінці '...\n'
str_list2 = reversed(f.readlines())  # або зчитати файл в зворотньому порядку
f.close()
```

### read + split

Якщо потрібно отримати рядки файлу, але **без** `\n` в кінці, можна скористатися методом split і як роздільник вказати символ \n:

```python
f = open('r1.txt')
str_list = f.read().split('\n')  # ел-нти списку не матимуть на кінці '\n'
f.close()
```

## modes (режими)

где `mode` - режим работы с файлом: `'r'` - read; `'a'` - append; `'w'` - write

* `'r'` - Открыть файл только для чтения (значение по умолчанию)
* `'w'` - Открыть файл для записи. Если файл существует, то его содержимое удаляется
* `'a'` - Открыть файл для добавления записей. Данные добавляются в конец файла
* `'r+'` - Открыть файл для чтения и записи. Проверь это!
  * если файл существует, то его содержимое удаляется.
  * если файл не существует - будет вызвано исключение.
* `'w+'` - открыть файл для чтения и записи
  * если файл существует, то его содержимое удаляется
  * если файл не существует, то создается новый
* `'a+'` - открыть файл для чтения и записи. Данные добавляются в конец файла
  * если файл существует, что тут?
  * если файл не существует, то что тут?

## Прочитати файл порядково

```python
f = open('r1.txt')
f.readline()  # 'first string\n'
f.readline()  # 'second string\n'
f.close()
```

Але часто нема необхідності у використанні методів read. Напр., цикл for:

```python
f = open('r1.txt')
for line in f:
    print(line)
f.close()
```

## Приклад з виключенням

```python
try:
    fh = open("testfile", "w")
    try:
        fh.write("This is my test file for exception handling!!")
    finally:
        print ("Going to close the file")
        fh.close()
    except IOError:
        print ("Error: can\'t find file or read data")
```

## Робота с двомя файлами одночасно <a href="#rabota-s-dvumya-failami-odnovremenno" id="rabota-s-dvumya-failami-odnovremenno"></a>

```python
with open(fname + '.inp') as f_inp:
    with open(fname + '.out', 'w') as f_out:
        for line in f_inp:
            line = re.sub('\s{4}','\t',line)
            f_out.write(line)
    f_out.close()  # з with можна цього не робити
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://olexsyn.gitbook.io/enote/progr/python/files.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
