Как прочитать несколько файлов в папке python
Перейти к содержимому

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

  • автор:

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

Для открытия файлов в python используется функция open :

file = open("/path/for/your/file.txt", "r") 

Она возвращает поток — интерфейс взаимодействия с содержимым файла.

Функция open принимает первым аргументом полное имя файла (с путём, абсолютным или относительным), вторым — режим, в котором мы откроем файл

Режим Обозначение
‘r’ открытие на чтение (является значением по умолчанию).
‘w’ открытие на запись, содержимое файла удаляется, если файла не существует, создается новый.
‘x’ открытие на запись, если файла не существует, иначе исключение.
‘a’ открытие на дозапись, информация добавляется в конец файла.
‘b’ открытие в двоичном режиме.
‘t’ открытие в текстовом режиме (является значением по умолчанию).
‘+’ открытие на чтение и запись

По умолчанию файл открывается в режиме rt — для чтения в текстовом формате.

Стоит заметить, что файл можно открыть в двух разных форматах: текстовом и бинарном (двоичном). Файлы, открытые в текстовом формате (по умолчанию, или явно добавляя “t” к аргументу режима), обрабатываются Python-ом и возвращаются как строки. При открытии файла в бинарном формате никакой обработки содержимого не производится, содержимое возвращается побайтово.

Таким образом, если мы хотим открыть файл в двоичном формате для записи, надо использовать режим “wb”, если мы хотим дописать содержимое в конец файла в текстовом формате, то — “a” или “at”, “r+b” — открыть двоичный файл на чтение и запись.

Обычно, файлы, в которых содержится текст, например, файлы txt , код вашей программы, файлы формата csv , открываются в текстовом формате, а файлы, которые нельзя проинтерпретировать как текст — в бинарном (например, картинки, музыку). Иногда файлы с текстом открывают в бинарном режиме, для более явного управления всеми спецсимволами (например табуляция ↹).

При открытии файла в текстовом режиме, также можно указать подходящую кодировку. Например, если в вашем файле содержится текст на русском в utf8, откройте его в этой кодировке:

russian_file = open("russian.txt", "r", encoding="utf8") 

Как только файл был открыт и у вас появился файловый объект, вы можете получить следующую информацию о нем:

Атрибут Значение
file.closed Возвращает True если файл был закрыт.
file.mode Возвращает режим доступа, с которым был открыт файл.
file.name Возвращает имя файла.

У получаемого объекта есть несколько полезных методов, рассмотрим их.

    метод read ( n ) позволяет прочитать следующие n символов файла. Замечу, что можно представить, что в нашем объекте файла есть указатель на текущую читаемую позицию. При открытии файла, она ставится в самое начало. По мере чтения, этот указатель сдвигается. Таким образом, если выполнять read ( n ) несколько раз подряд, мы будем получать не первые n символов, а каждый раз новые, n символов.

Если n явно не указать, то считается весь файл целиком (указатель окажется в самом конце файла). Для использования метода read, файл должен быть открыт в режиме для чтения Примечание: чтобы узнать текущее положение указателя внутри файла, можно воспользоваться методом tell () , а чтобы установить указатель в нужное положение pos , используется метод seek ( pos )

file = open("russian.txt", "r", encoding="utf8") #открыли файл, file.tell() == 0, #т.е указатель стоит в самом начале text = file.read() #считали весь файл 

Следует сказать, что открытый в любом режиме файл после его использования нужно обязательно закрывать. Делается это методом close(). Посе его выполнения работа с файлом будет корректно завершена, но с нашим объектом файла работать уже тоже будет нельзя — при необходимости повторной работы с файлом нужно снова его открывать при помощи open.

file = open("some_data.txt") text = file.read() file.close() #дальше работаем с text, если надо 

Но вдруг в процессе выполнения нашей программы произройдет критическая ошибка и программа завершит свое выполнение, а мы, например, записывали в файл какую-то информацию? Верно, вполне возможно, что последняя добавленная информация в файл так и не запишется. Чтобы избежать такой ситуации, ну и чтобы просто не забывать вовремя вызывать close() используется конструкция with:

with open("text.txt", "w") as out: #в out теперь находится ссылка на наш объект файла, как если #бы было просто out = open("text.txt", "w") for i in range(100): out.write("А я запишу все эти строки в влюбом случае\n") #записываем 100 одинаковых строчек raise Exception #принудительно "вызываем" ошибку. #Об Exceptionах будет дальше в следующих семинарах #в файле все равно будут все 100 нужные строки 

Конструкция with используется для того, чтобы гаранировать, что критические действия будут выполнены в любом случае, ее можно использовать и в некоторых других случаях, но в контексте открытия файлов она используется чаще всего.

Я рекомендую по возможности всегда открывать файлы, не зависимо от режима, с конструкцией with!

Через конструкцию with можно открывать сразу несколько файлов:

with open("input.txt", "r") as input, open("output.txt", "w") as output: output.write(input.read()) #скопировали содержимое input в output 
  • Чтобы считать из файла целую строку, используется метод readline(max_len). Если указать параметр max_len, то будут считаны максимум max_len символов
with open("text.txt", "r") as file: print(file.readline()) #считали и вывели первую строку файла 

На самом деле у нашего объекта файла есть итератор, поэтому перебирать строки внутри файла можно с его помощью:

with open("text.txt", "r") as file: for line in file: print(line) 

Такой способ чтения наиболее удобен для построчного чтения

Упражнение 1: создайте произвольный текстовый файл с несколькими строками произвольного текста. Выведите в консоль строки файла, удалив лишние пробелы в начале и конце строк, если они есть

Упражнение 2: запишите в новый файл содержимое списка строк (каждую строку с новой строки) без использования цикла

def write_array(array, file_name): """записывает строки из array в файл file_name""" #ваш код здесь pass 

Работа с файловой системой

Взаимодействие с файлами не ограничивается только самими файлами, нам часто приходится работать и с папками. Главными героями этого раздела будут библиотеки os и os.path. Они связаны с операционной системой компьютера и позволяют взаимодейстовать с файловой системой.

Все папки директории

os.listdir(dir) перечисялет файлы и папки в указанной директории dir. Если вызвать эту функцию без аргументов, она вернет файлы и папки текущей рабочей директории.

Текущая папка

Относительные пути строятся относительно текущей папки. Чтобы получить абсолютный путь файла из относительного, используется функция os.path.abspath(file_path). Чтобы узнать, какая папка является текущей, можно вызвать функцию os.getcwd(). Для смены текущей папки используется os.chdir(new_dir).

Проверка существования файла или папки и определение, является ли имя файлом или папкой

os.path.exists(file_name) проверяет, существует ли указанный файл (или директория) file_name.

Чтобы проверить, является ли данное имя name файлом или папкой, можно воспользоваться функциями os.isdir(name) или os.isfile(name), которые возвращают True или False.

Рекурсивный обход папок

Одной из самых интересных и мощных функций является функция os.walk(dir) — она позволяет рекурсивно пройтись по всем папкам, подпапкам, их подпапкам и так далее. На самом деле она возвращает генератор (последовательность элементов). Каждый элемент представляеьт собой кортеж из 3х элементов. Первый элемнт — строковое представление директории текущей директории, которую просматривает функция. Вторым элементом — список всех подпапок данной директории, а третьим — список всех файлов этой директории.

for current_dir, dirs, files in os.walk("."): #передаем в качестве аргумента текущую директорию #("." - означает именно ее) print(current_dir, dirs, files) #выведем, что получается 

Копирование файлов

Копировать файлы можно при помощи функции copy из модуля shutil

shutil.copy("input.txt", "output.txt") 

Копировать папки можно с помощью copytree из того же модуля:

shutil.copytree("test", "test/test2") #Скопирует папку test внутрь неё самой же в подпапку test2 

Многие другие функции для работы с файлами и папками вы сможете найти в модулях os и shutil. Теперь вы знаете, где искать нужный функционал 😉

Упражнение 3: Вам дана в архиве файловая структура, состоящая из директорий и файлов.

Вам необходимо распаковать этот архив (средствами языка python), и затем найти в данной в файловой структуре все директории, в которых есть хотя бы один файл с расширением “.py”.

Ответом на данную задачу будет являться файл со списком таких директорий, отсортированных в лексикографическом порядке.

Распространенные форматы текстовых данных

csv

csv является табличным форматом. В нем содержатся значения разделенные запятой (Comma-Separated Values). Например,

first name,last name,module1,module2,module3 Nikolay,Neznaev,0,20,10 Stepan,Sharyashiy,100,99.5,100 

Для работы с csv файлами можно воспользоваться библиотекой csv:

import csv with open("example.csv", "r") as file: reader = csv.reader(file) #На основе открытого файла получаем объект из библиотеки csv for row in reader: print(row) #Каждая строка - список значений 

В csv.reader параметром delimeter можно передать разделитель значений, таким образом разделяющим символом в файле csv может быть не только запятая.

Для изолирования некоторых значений можно пользоваться двойными кавычками. Библиотека csv учитывает различные мелочи, такие как строки с содержащимися в ней запятыми и переносами строки, различные разделители, поэтому ее использование целесообразнее splitа по разделителю.

Для записи значений в csv формате используется csv.writer:

import csv students = [ ["Greg", "Lebovskiy", 70, 80, 90, "Good job, Greg!"], ["Nick", "Shalopaev", 10, 50, 45, "Shalopaev, you should study better!"] ] with open("example.csv", "a") as file: writer = csv.writer(file) #На основе открытого файла получаем объект из библиотеки csv for student in students: writer.writerow(student) #Записываем строку #Вместо цикла выше мы могли сразу записать все через writer.writerows(students) 

JSON

JSON (JavaScript Object Notation) — простой формат обмена данными, удобный для чтения и написания как человеком, так и компьютером. Впервые он был придуман и использован в JavaScript для хранения структур и классов, но быстро обео свою популярность и вышел за пределы своего родителя.

JSON основан на двух структурах данных: * Коллекция пар ключ/значение. В разных языках, эта концепция реализована как объект, запись, структура, словарь, хэш, именованный список или ассоциативный массив. * Упорядоченный список значений. В большинстве языков это реализовано как массив, вектор, список или последовательность.

Это универсальные структуры данных. Почти все современные языки программирования поддерживают их в какой-либо форме. Логично предположить, что формат данных, независимый от языка программирования, должен быть основан на этих структурах.

Объекты в формате SJON хранятся как словари в Python, но с некоторыми деталями: во первых, ключом в json-объекте может быть только строка, значения True и False пишутся с маленькой буквы, значению None соответствует значение null, строки хранятся только внутри двойных кавычек.

Для удобной работы с json файлами в языке python можно использовать библиотеку json

import json student1 =  "full_name" : "Greg Martin", "scores" : [100, 85, 94], "certificate" : True, "comment": "Great job, Greg!" > student2 =  "full_name" : "John Price", "scores" : [0, 10, 0], "certificate" : False, "comment": "Guns aren't gonna help you here, captain!" > data = [student1, student2] print(json.dumps(data, indent=4, sort_keys=True)) #Делаем отступы в 4 пробела, сортируем ключи в алфавитном порядке 

Для получения строкового представления объекта в формате json можно использовать json.dumps(data, **parrams) с различными вспомогательными настройками (пробелы, сортировка и др.)

Для записи в файл можно воспользоваться json.dump(data, file_obj, **params):

with open("output.json", "w") as out: json.dump(data, out, indent=4, sort_keys=True) 

Для получения объекта python на основе его срокового представления можно воспользоваться функцией json.loads или json.load для считывания из файла:

json_str = json.dumps(data, indent=4, sort_keys=True) #получение строкового представления json data_again = json.loads(json_str) #получаем объект python print(sum(data_again[0]["scores"])) #убедимся в кореектном считывании: #посчитаем сумму баллов у первого студента with open("output.json") as file: data_from_file = json.load(file) #считаем объект из файла print(sum(data_from_file[0]["scores"])) #аналогично посчитаем сумму баллов 

При записи-считывнии объектов из формата json кортежи превращаются в списки # Исключения (материал ниже взят с сайта https://pythonworld.ru/tipy-dannyx-v-python/isklyucheniya-v-python-konstrukciya-try-except-dlya-obrabotki-isklyuchenij.html )

Исключения (exceptions) — ещё один тип данных в python. Исключения необходимы для того, чтобы сообщать программисту об ошибках.

Самый простейший пример исключения — деление на ноль:

100 / 0 Traceback (most recent call last): File "", line 1, in 100 / 0 ZeroDivisionError: division by zero 

Разберём это сообщение подробнее: интерпретатор нам сообщает о том, что он поймал исключение и напечатал информацию (Traceback (most recent call last)).

Далее имя файла (File «»). Имя пустое, потому что мы находимся в интерактивном режиме, строка в файле (line 1);

Выражение, в котором произошла ошибка (100 / 0).

Название исключения (ZeroDivisionError) и краткое описание исключения (division by zero).

Разумеется, возможны и другие исключения:

2 + '1' Traceback (most recent call last): File "", line 1, in 2 + '1' TypeError: unsupported operand type(s) for +: 'int' and 'str' int('qwerty') Traceback (most recent call last): File "", line 1, in int('qwerty') ValueError: invalid literal for int() with base 10: 'qwerty' 

В этих двух примерах генерируются исключения TypeError и ValueError соответственно. Подсказки дают нам полную информацию о том, где порождено исключение, и с чем оно связано.

Рассмотрим иерархию встроенных в python исключений, хотя иногда вам могут встретиться и другие, так как программисты могут создавать собственные исключения. Данный список актуален для python 3.3, в более ранних версиях есть незначительные изменения.

  • BaseException — базовое исключение, от которого берут начало все остальные.
    • SystemExit — исключение, порождаемое функцией sys.exit при выходе из программы.
    • KeyboardInterrupt — порождается при прерывании программы пользователем (обычно сочетанием клавиш Ctrl+C).
    • GeneratorExit — порождается при вызове метода close объекта generator.
    • Exception — а вот тут уже заканчиваются полностью системные исключения (которые лучше не трогать) и начинаются обыкновенные, с которыми можно работать.
      • StopIteration — порождается встроенной функцией next, если в итераторе больше нет элементов.
      • ArithmeticError — арифметическая ошибка.
        • FloatingPointError — порождается при неудачном выполнении операции с плавающей запятой. На практике встречается нечасто.
        • OverflowError — возникает, когда результат арифметической операции слишком велик для представления. Не появляется при обычной работе с целыми числами (так как python поддерживает длинные числа), но может возникать в некоторых других случаях.
        • ZeroDivisionError — деление на ноль.
        • IndexError — индекс не входит в диапазон элементов.
        • KeyError — несуществующий ключ (в словаре, множестве или другом объекте).
        • UnboundLocalError — сделана ссылка на локальную переменную в функции, но переменная не определена ранее.
        • BlockingIOError
        • ChildProcessError — неудача при операции с дочерним процессом.
        • ConnectionError — базовый класс для исключений, связанных с подключениями.
          • BrokenPipeError
          • ConnectionAbortedError
          • ConnectionRefusedError
          • ConnectionResetError
          • IndentationError — неправильные отступы.
            • TabError — смешивание в отступах табуляции и пробелов.
            • UnicodeEncodeError — исключение, связанное с кодированием unicode.
            • UnicodeDecodeError — исключение, связанное с декодированием unicode.
            • UnicodeTranslateError — исключение, связанное с переводом unicode.

            Теперь, зная, когда и при каких обстоятельствах могут возникнуть исключения, мы можем их обрабатывать. Для обработки исключений используется конструкция try — except.

            Первый пример применения этой конструкции:

            try: k = 1 / 0 except ZeroDivisionError: k = 0 print(k) 

            В блоке try мы выполняем инструкцию, которая может породить исключение, а в блоке except мы перехватываем их. При этом перехватываются как само исключение, так и его потомки. Например, перехватывая ArithmeticError, мы также перехватываем FloatingPointError, OverflowError и ZeroDivisionError.

            try: k = 1 / 0 except ArithmeticError: k = 0 print(k) 

            Также возможна инструкция except без аргументов, которая перехватывает вообще всё (и прерывание с клавиатуры, и системный выход и т. д.). Поэтому в такой форме инструкция except практически не используется, а используется except Exception. Однако чаще всего перехватывают исключения по одному, для упрощения отладки (вдруг вы ещё другую ошибку сделаете, а except её перехватит).

            Ещё две инструкции, относящиеся к нашей проблеме, это finally и else. Finally выполняет блок инструкций в любом случае, было ли исключение, или нет (применима, когда нужно непременно что-то сделать, к примеру, закрыть файл). Инструкция else выполняется в том случае, если исключения не было.

            f = open('1.txt') ints = [] try: for line in f: ints.append(int(line)) except ValueError: print('Это не число. Выходим.') except Exception: print('Это что ещё такое?') else: print('Всё хорошо.') finally: f.close() print('Я закрыл файл.') # Именно в таком порядке: try, группа except, затем else, и только потом finally. 

            Чтобы в своей программе вызвать исключение надо воспользоваться командой raise.

            Чтобы создать свое собственное исключение, надо унаследоваться от одного из уже существующих классов исключения:

            class MyException(Exception): #создали свой класс. Ничего переопределять не обязательно pass raise MyException("My hovercraft is full of eels") #поднятие исключения 

            Сайт построен с использованием Pelican. За основу оформления взята тема от Smashing Magazine. Исходные тексты программ, приведённые на этом сайте, распространяются под лицензией GPLv3, все остальные материалы сайта распространяются под лицензией CC-BY.

            Работа с путями к файлам и папкам

            Модуль os содержит подмодуль os.path , который позволяет работать с путями файлов и папок. Импортировать этот модуль отдельно не нужно, достаточно выполнить import os .

            Присоединение одной части пути к другой

            Работа с путями к файлам и папкам как с простыми строками чревата множеством ошибок и может создать проблемы при переносе программы между различными операционными системами. Правильный путь объединить две части пути — это использование os.path.join :

            >>> import os >>> dirpath = '../books' >>> # Здесь filename - имя файла, а не путь от места запуска программы до него: >>> for filename in os.listdir(dirpath): . # filepath = dirname + filename - сработает неправильно, так как будет не хватать "/" . filepath = os.path.join(dirname, filename) # поставит "/" или "\" за нас . with open(filepath, encoding='utf-8') as fd: . if 'нагваль' in fd.read(): . print('Книга ' + filename + ' об индейцах') 

            Извлечение имени файла из пути

            Функция os.path.split совершает обратное действие — отрезает имя файла или ниже лежащей папки от пути:

            >>> import os >>> path = './work/project/version8/final.txt' >>> dirpath, filename = os.path.split(path) >>> print(dirpath) ./work/project/version8 >>> print(filename) final.txt >>> project_dir, version_dir = os.path.split(dirpath) >>> print(project_dir) ./work/project >>> print(version_dir) version8 

            Извлечение расширения

            Кроме того, может пригодиться функция os.path.splitext , котоая отрезает расширение файла:

            >>> import os >>> path = './work/project/version12/final.txt' >>> base, ext = os.path.splitext(path) >>> print(base, ext, sep='\n') ./work/project/version12/final .txt 

            Проверка типа файла

            Кроме прочего, модуль os.path содержит функции для проверки существования файла и для определения его типа:

            >>> import os >>> path = './kursach/text' >>> if os.path.exists(path): . print(path, 'существует') . if os.path.isfile(path): . print(path, '— это файл') . elif os.path.isdir(path): . print(path, '— это папка') . else: . print(path, '— это ни файл и ни папка') . else: . print(path, 'не существует') 

            Манипуляции с файлами и папками

            Производите все манипуляции с файлами с осторожностью, придерживайтесь правила «семь раз отмерь — один раз отрежь». Не забывайте программно производить все возможные проверки перед выполнением операций.

            Создание файла

            Нет ничего проще, чем создать пустой файл, достаточно открыть несуществующий файл с флагом ‘x’ :

            >>> with open('empty.txt', 'x'): . pass 

            Конечно, можно было бы использовать флаг ‘w’ , но тогда уже существующий файл был бы стёрт. С флагом ‘x’ open либо создаст новый файл, либо выбросит ошибку.

            Создание папки

            Для создания новой папки используйте os.mkdir(name) . Эта функция выбросит ошибку, если по указанному пути уже существует файл или папка. Если вам нужно создать сразу несколько вложенных папок, то смотрите функцию os.makedirs(name, exist_ok=False) .

            Перемещение и переименование

            Для удобной манипуляции с файлами и папками в стандартной библиотеки Python существует специальный модуль shutil . Функция shutil.move(source, destination) позволяет вам переместить любой файл или папку (даже непустую). Обратите внимание, что если destination — это уже существующая папка, то файл/папка будет перемещена внутрь неё, в остальных случаях файл/папка будут скопированы точно по нужному адресу. В случае успеха, функция вернёт новое местоположение файла. Если destination существует и не является папкой, то будет выброшена ошибка.

            >>> import shutil >>> source = 'my_poem.txt' >>> destination = 'trash' >>> # Создаем папку назначения >>> os.mkdir(destination) >>> # Перенесем файл внутрь папки >>> path = shutil.move(source, destination) >>> print(path) trash/my_poem.txt >>> # Перенесем файл обратно >>> new_name = 'poem.txt' >>> final_path = shutil.move(path, new_name) >>> print(final_path) poem.txt 

            Как же переименовать файл? Несмотря на то, что os содержит специальную функцию для переименования, нужно понимать, что в рамках одной файловой системы перемещение и переименование — это одно и то же. Когда вы переименовываете файл, его содержимое не переписывается на носителе в другое место, просто файловая система теперь обозначает его положение другим путём.

            Копирование

            Скопировать файл можно с помощью функции shutil.copy(source, destination) . Правила расположения копии будут те же, что и при использовании shutil.move , за тем исключением, что если destination существует и не является файлом, то он будет заменён и ошибки это не вызовет.

            Скопировать папку для операционной системы сложнее, ведь мы всегда хотим скопировать не только папку, но и её содержимое. Для копирования папок используйте shutil.copytree(source, destination) . Обратите внимание, что для этой функции destination всегда должно быть путём конечного расположения файлов и не может быть уже существующей папкой.

            Удаление

            Удалить файл можно с помощью функции os.remove , а пустую папку с помощью функции os.rmdir .

            А вот для удаления папки с содержимым вновь понадобится shutil . Для удаления такой папки используйте shutil.rmtree .

            Будьте осторожны, команды удаления стирают файл, а не перемещают его в корзину, вне зависимости от операционной системы! После такого удаления восстановить файл может быть сложно или вовсе невозможно.

            Домашняя работа

            1. В текущей папке лежат файлы с расширениями .mp3 , .flac и .oga . Создайте папки mp3 , flac , oga и положите туда все файлы с соответствующими расширениями.
            2. В текущей папке лежит две других папки: vasya и mila , причём в этих папках могут лежать файлы с одинаковыми именами, например vasya/kursovaya.doc и mila/kursovaya.doc . Скопируйте все файлы из этих папок в текущую папку назвав их следующим образом: vasya_kursovaya.doc , mila_test.pdf и т.п.
            3. В текущей папке лежат файлы следующего вида: S01E01.mkv , S01E02.mkv , S02E01.mkv и т.п., то есть все файлы начинаются с S01 или S02 . Создайте папки S01 и S02 и переложите туда соответствующие файлы.
            4. В текущей папке лежат файлы вида 2019-03-08.jpg , 2019-04-01.jpg и т.п. Отсортируйте файлы по имени и переименуйте их в 1.jpg , 2.jpg , …, 10.jpg , и т.д.
            5. В текущей папке лежат две другие папки: video и sub . Создайте новую папку watch_me и переложите туда содержимое указанных папок (сами папки класть не надо).
            6. В текущей папке лежат файлы типа Nina_Stoletova.jpg , Misha_Perelman.jpg и т.п. Переименуйте их переставив имя и фамилию местами.
            7. В текущей папке лежит файл list.tsv , в котором с новой строки написаны имена некоторых других файлов этой папки. Создайте папку list и переложите в неё данные файлы.

            Для тестирования вашей программы положите в репозиторий файлы и папки с соответствующими именами. Файлы должны быть пустыми, если не указано обратного.

            Как открыть несколько файлов через input

            Как открыть сразу несколько текстовых файлов через «append from»?
            суть в чем: мне необходимо сформировать из 2-х файлов txt сделать 1 курсор (дбф)! вот примерно.

            Открыть в проге несколько файлов через терминал
            Здравствуйте уважаемые! Кто знает как открыть в проге несколько файлов через терминал. У меня не.

            Как открыть несколько файлов в OpenFileDialog
            Помогите пожалуйста открыть несколько файлов с помощью openFileDialog. Пишут, что надо поменять.

            Как открыть несколько файлов на разных мониторах
            Всем привет. Необходимо открыть несколько файлов .jpg, .avi и .exe так, чтобы каждый файл.

            Заклинатель змей
            611 / 508 / 213
            Регистрация: 30.04.2016
            Сообщений: 2,412
            Detseus, идея у этого какая?
            Регистрация: 18.04.2020
            Сообщений: 49

            ЦитатаСообщение от DobroAlex Посмотреть сообщение

            Detseus, идея у этого какая?
            Открыть несколько файлов с указанием их имени через input
            Заклинатель змей
            611 / 508 / 213
            Регистрация: 30.04.2016
            Сообщений: 2,412
            Detseus,

            1 2 3 4 5
            a = open(. ) b = open (. ) a.close() b.close()

            Добавлено через 23 секунды
            Путь лучше абсолютный

            Добавлено через 59 секунд
            И файл лучше создать перед тем, как в него писать, или убедиться, что он существует

            Регистрация: 18.04.2020
            Сообщений: 49

            ЦитатаСообщение от DobroAlex Посмотреть сообщение

            Detseus,

            1 2 3 4 5
            a = open(. ) b = open (. ) a.close() b.close()

            Добавлено через 23 секунды
            Путь лучше абсолютный

            Добавлено через 59 секунд
            И файл лучше создать перед тем, как в него писать, или убедиться, что он существует

            Так мне ж надо через инпут ввести несколько имен файлов через запятую, так вообще можно? Хочу так это реализовать. Но как не старался не получилось

            Заклинатель змей
            611 / 508 / 213
            Регистрация: 30.04.2016
            Сообщений: 2,412

            Detseus, идея такая, предполагаю, что файлы будут создаваться в папке, где запускается файл

            1 2 3 4 5 6 7
            import os import os.path #или import os, не уверен new_file_name: str = input () if os.path.exists(new_file_name): pass # можно открывать файл else: f = open (new_file_name, "w+") # создаст файл для чтения и записи

            Добавлено через 2 минуты
            Мээ, в теории всегда можно сделать

            f = open (new_path_file, "a+")

            Добавлено через 1 минуту

            я не с ПК, поэтому не могу проверить, прошу простить

            Am I evil? Yes, I am!

            Эксперт PythonЭксперт Java

            18968 / 9663 / 2710
            Регистрация: 21.10.2017
            Сообщений: 21,473

            Лучший ответ

            Сообщение было отмечено Detseus как решение

            Решение

            Detseus,

            1 2 3 4 5
            filenames = input().split(',') for i in filenames: f1 = open(i, 'w') # some actions f1.close()

            Регистрация: 23.08.2018
            Сообщений: 68

            Detseus, можно прочитать всю директорию и не вводить файлы вручную, правда может понадобится фильтрация нужных файлов.

            import os files = os.listdir()

            Регистрация: 18.04.2020
            Сообщений: 49

            ЦитатаСообщение от iSmokeJC Посмотреть сообщение

            Detseus,

            1 2 3 4 5
            filenames = input().split(',') for i in filenames: f1 = open(i, 'w') # some actions f1.close()

            Создаёт пустой файл без расширения с указанным именем
            Am I evil? Yes, I am!

            Эксперт PythonЭксперт Java

            18968 / 9663 / 2710
            Регистрация: 21.10.2017
            Сообщений: 21,473
            Регистрация: 18.04.2020
            Сообщений: 49

            ЦитатаСообщение от DobroAlex Посмотреть сообщение

            Detseus, идея такая, предполагаю, что файлы будут создаваться в папке, где запускается файл

            1 2 3 4 5 6 7
            import os import os.path #или import os, не уверен new_file_name: str = input () if os.path.exists(new_file_name): pass # можно открывать файл else: f = open (new_file_name, "w+") # создаст файл для чтения и записи

            Добавлено через 2 минуты
            Мээ, в теории всегда можно сделать

            f = open (new_path_file, "a+")

            Добавлено через 1 минуту

            я не с ПК, поэтому не могу проверить, прошу простить

            Создаёт, а не открывает файл также с указанным именем без расширения, при указании расширения выдаёт ошибку

            Добавлено через 1 минуту

            ЦитатаСообщение от iSmokeJC Посмотреть сообщение

            Да, но ведь мне надо открыть TXT файлы, указанные в инпут через запятую и несколько, я про это
            Am I evil? Yes, I am!

            Эксперт PythonЭксперт Java

            18968 / 9663 / 2710
            Регистрация: 21.10.2017
            Сообщений: 21,473

            Ну и указывай имена с расширением, через запятую!

            Добавлено через 47 секунд
            И параметр ставь ‘r’, а не ‘w’

            Добавлено через 23 секунды
            Что тоже, кстати, логично

            Регистрация: 18.04.2020
            Сообщений: 49

            ЦитатаСообщение от iSmokeJC Посмотреть сообщение

            Ну и указывай имена с расширением, через запятую!

            Добавлено через 47 секунд
            И параметр ставь ‘r’, а не ‘w’

            Добавлено через 23 секунды
            Что тоже, кстати, логично

            Это я понял да, а можно ли как то без ввода расширения их открывать?
            Am I evil? Yes, I am!

            Эксперт PythonЭксперт Java

            18968 / 9663 / 2710
            Регистрация: 21.10.2017
            Сообщений: 21,473

            Лучший ответ

            Сообщение было отмечено Detseus как решение

            Решение

            Добавить в цикле динамически

            Добавлено через 6 минут

            filenames = [i+".txt" for i in input().split(',')]

            Регистрация: 18.04.2020
            Сообщений: 49

            1 2 3 4 5 6 7 8 9 10 11
            import random from random import randint path = "Results" filenames = [i+".txt" for i in input("Введите имена файлов (Пример: 1,2): ").split(',')] with open(f'\\.txt">', 'w') as outfile: for i in filenames: f1 = open(i, "r") f1r = f1.read() outfile.write(f1r + "\n") f1.close()

            Сделал вобщем-то так, только в конце файла перенос строки не нужный напрягает
            Am I evil? Yes, I am!

            Эксперт PythonЭксперт Java

            18968 / 9663 / 2710
            Регистрация: 21.10.2017
            Сообщений: 21,473

            outfile.write("\n" + f1r)

            Регистрация: 18.04.2020
            Сообщений: 49

            ЦитатаСообщение от iSmokeJC Посмотреть сообщение

            outfile.write("\n" + f1r)

            Не, потому что пустая строка появляется ПЕРЕД теми, которые загружены

            Добавлено через 42 минуты
            Добавил вниз 2 строчки решив, что последняя строка заменится пустотой, но не тут-то было, теперь там копия предыдущей строки, что делать? ^_^

            1 2 3 4 5 6 7 8 9 10 11 12 13
            import random from random import randint path = "Results" filenames = [i+".txt" for i in input("Введите имена файлов (Пример: 1,2): ").split(',')] with open(f'\\.txt">', 'w') as outfile: for i in filenames: f1 = open(i, "r") f1r = f1.read() outfile.write(f1r + "\n") f1.close() f1 = open (i, "r").read().replace("\n", "") outfile.write(f1r)

            87844 / 49110 / 22898
            Регистрация: 17.06.2006
            Сообщений: 92,604
            Помогаю со студенческими работами здесь

            Как открыть несколько файлов в одном процессе (окне)
            Пишу приложение, которое открывает бинарный файл, читает его и строит диаграммы на основе.

            OpenDialog: как открыть и загрузить в Memo несколько файлов сразу?
            Здраствуйте как открыть и загрузить в мемо несколько файлов за 1 клик

            Как скачивать несколько файлов через WebClient по очереди, через DownloadFileAsync
            Доброй ночи. Столкнулся с проблемой по скачиванию нескольких файлов друг за другом. Фулл код как.

            Как открыть сразу несколько акков гугл через питон
            Я не долго пользуюсь питоном, знаю основы по типу циклов ООС и все такое, все чему учат курсы того.

            Как скомпилировать несколько файлов через консоль g++
            Возможно заезженная тема, но не получается собрать несколько файлов в один. Что пишет гугл, не.

            Открыть несколько файлов
            Добрый день. Есть код, ShellExecute (Handle, nil, ‘bin.exe’, PChar(‘ /5 /g- /r- ‘ +’"’+.

            Последовательное чтение нескольких файлов

            в соседней папке есть список нескольких файлов, представляющих собой таблицу с данными(данные записаны списком в 4 столбика «значение, цена, вес, количество», и мне нужно эти данные оттуда взять, и между собой сравнить, чтобы найти в каждом файле самый «дорогой» и самый «дешевый» пункт. Пробовал вот такой код, чтобы получить возможность к информации в каждом файле, но он не работает

            import os path = '/Users/folder/' # некая папка, в которой лежат несколько файлов path_normalized = os.path.normpath(path) for dirpath in os.walk(path_normalized): print('') x = 0 while True: print(dirpath[2][x]) # здесь я получаю список названий файлов, и пытаюсь перебрать по номеру элемента x+=1 handle = open("/Users/folder/"+dirpath[2][x]+"r") # пытаюсь подставить в ссылку название файла, чтобы потом прочитать 

            Каким образом можно последовательно добраться до информации в файлах, чтобы ее можно было дальше обработать?

            Отслеживать
            задан 17 ноя 2020 в 21:06
            AndreyStashev AndreyStashev
            211 1 1 золотой знак 3 3 серебряных знака 22 22 бронзовых знака
            Что значит «не работает»? Что этот код вообще должен делать?
            17 ноя 2020 в 21:31
            Я таким образом пытаюсь открыть последовательно файлы, генерируя к каждому путь до него
            17 ноя 2020 в 21:42
            Ну и? Не открывается или в чем проблема?
            17 ноя 2020 в 21:42

            Да, такой метод получения ссылки очевидно неправильный. Поэтому хочу узнать ответ от людей, кто уже сталкивался с такими задачами, каким образом они делают

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *