Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/26: Рейтинг темы: голосов - 26, средняя оценка - 4.85
712 / 351 / 120
Регистрация: 09.12.2020
Сообщений: 918

Разделить файл на части

15.03.2021, 19:18. Показов 5060. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
есть файл .txt (строка длиной n >> 1000000)
Нужно написать программу, которая будет делить этот файл на n//200000 файлов. поскольку я далеко в этом деле не профессионал, написал только для известного числа n, не умею работать с созданием переменных в режиме "реального времени". В принципе, код будет применен в практических целях, так что не сильно уступает "ручному" варианту, но очень интересно будет посмотреть на его полностью автоматизированный вариант

Заранее спасибо
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.03.2021, 19:18
Ответы с готовыми решениями:

Разделить файл in.wav на четыре части, поменять местами первую часть с третьей, а вторую с четвертой
Напишите функцию pitch_and_toss(), которая будет делить файл in.wav на четыре части, менять местами первую часть с третьей, а вторую с...

Разделить слово на части
Нужно разделить число на максимальное число частей так, чтобы каждая буква встречалась только в одной части. из arsegg получится a r s e...

Разделить матрицу на 4 части
Подскажите как вывести ещё 2 части матрицы(верхняя правая и нижняя левая часть) или может быть есть какой то другой способ разделения...

18
 Аватар для Semen-Semenich
5220 / 3468 / 1172
Регистрация: 21.03.2016
Сообщений: 8,293
15.03.2021, 20:43
Цитата Сообщение от alilxxey Посмотреть сообщение
для известного числа n
откуда оно вам известно? строка длиной n >> 1000000 где n может быть 1000001 и 5000000. честно вообще не понятна суть задачи и сам вопрос.
0
712 / 351 / 120
Регистрация: 09.12.2020
Сообщений: 918
15.03.2021, 20:47  [ТС]
Semen-Semenich,
Цитата Сообщение от Semen-Semenich Посмотреть сообщение
откуда оно вам известно? строка длиной n >> 1000000 где n может быть 1000001 и 5000000. честно вообще не понятна суть задачи и сам вопрос.
я имею ввиду, что писал программу под конкретный .txt и заранее знал всю инфу о нем, а хочу написать программу, которая будет так скажем неизвестный файл обрабатывать
0
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
15.03.2021, 20:55
Лучший ответ Сообщение было отмечено alilxxey как решение

Решение

Не по теме:

alilxxey, ах ты сатанист))


По теме: а зачем ты вообще делишь файл? Не считывай все содержимое файла в память: читай по 8 * n символов и клади в очередь. Смотришь все вхождения, удаляешь элементы из начала очереди, пока не останется 8 символов, начинаешь новую итерацию.
1
712 / 351 / 120
Регистрация: 09.12.2020
Сообщений: 918
15.03.2021, 21:10  [ТС]

Не по теме:

Arsegg,

Цитата Сообщение от Arsegg Посмотреть сообщение
alilxxey, ах ты сатанист))
ага))
на самом деле делаю уже это не столько для решения задачи, сколько просто чисто ради интереса и развития, не думаю, что мое решение можно как-то сильно усовершенствовать засчет этого



на вопрос ответил, надеюсь

Добавлено через 34 секунды
меня больше привлекает навыки работы с такого типа задачами, а не само деления миллиарда знаков пи на файлики)
0
15.03.2021, 21:15

Не по теме:

Цитата Сообщение от alilxxey Посмотреть сообщение
меня больше привлекает навыки работы с такого типа задачами, а не само деления миллиарда знаков пи на файлики)
Ну я ж и говорю: будущий дата сатанист))
P. S. Если сможешь реализовать алгоритм, который я выше написал - не стесняйся выкладывать свое решение на конкурс.

0
712 / 351 / 120
Регистрация: 09.12.2020
Сообщений: 918
15.03.2021, 21:18  [ТС]

Не по теме:

Цитата Сообщение от Arsegg Посмотреть сообщение
Ну я ж и говорю: будущий дата сатанист))
P. S. Если сможешь реализовать алгоритм, который я выше написал - не стесняйся выкладывать свое решение на конкурс.
ок, спасибо:)



Добавлено через 1 минуту
Arsegg, кстати, вопрос по теме. Когда мы открываем файл (f = open(...)) мы не загоняем его в память полностью - мы загружаем в память только символы из f.read(..)?
0
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
15.03.2021, 21:21
Цитата Сообщение от alilxxey Посмотреть сообщение
Когда мы открываем файл (f = open(...)) мы не загоняем его в память полностью
Нет, конечно, ты открываешь файловый дескриптор только. В память ты загоняешь, когда вызываешь метод read(). Кароч, кури документацию: найдешь метод (одноименный), как считывать только несколько символов.
2
712 / 351 / 120
Регистрация: 09.12.2020
Сообщений: 918
15.03.2021, 22:29  [ТС]
Arsegg, большое спасибо за ответ

Добавлено через 1 час 6 минут
Arsegg, столкнулся с проблемой - как очистить первые n элементов файла, не переводя этот файл в строку? Грубо говоря работаем только в файле, никуда его не перетаскивая
0
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
16.03.2021, 00:03
Цитата Сообщение от alilxxey Посмотреть сообщение
как очистить первые n элементов файла, не переводя этот файл в строку?
Пропускай их при чтении из файла.
0
712 / 351 / 120
Регистрация: 09.12.2020
Сообщений: 918
16.03.2021, 00:06  [ТС]
Цитата Сообщение от Arsegg Посмотреть сообщение
Пропускай их при чтении из файла.
а как именно? f.read(1000) читает первые 1000, на сколько я знаю, нельзя сделать так чтобы он пропускал несколько. Другая функция?
0
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
16.03.2021, 00:10
Цитата Сообщение от alilxxey Посмотреть сообщение
Другая функция?
Та же. Прочитай несколько символов и выкинь))
0
712 / 351 / 120
Регистрация: 09.12.2020
Сообщений: 918
16.03.2021, 00:12  [ТС]
Цитата Сообщение от Arsegg Посмотреть сообщение
Та же. Прочитай несколько символов и выкинь))
тогда память забивается, зачем это надо если можно с тем же успехом прочитать все и просто выкидывать по мере парсинга из строки просмотренные символы

Добавлено через 1 минуту
это добавляет эффективности в случаях когда искомое число находится не в самом конце, безусловно, но что если оно находится на i = 10^6 ?
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
16.03.2021, 00:53
alilxxey,
open в бинарном режиме позволяет управлять курсором позиции считывания через метод seek. НО в бинарном режиме нет никаких строк, только байты.

Если же нужно считывать строки - нет никаких способов пропустить n строк так или иначе не считывая их.
Но это не страшно, если считывание построчное - в памяти будет ровно одна строка. Но это будет медленно.
1
712 / 351 / 120
Регистрация: 09.12.2020
Сообщений: 918
16.03.2021, 00:55  [ТС]
Garry Galler, понял. но весь файл - число пи (оочень много знаков) - и все это одна строка
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
16.03.2021, 00:59
Цитата Сообщение от alilxxey Посмотреть сообщение
но весь файл - число пи (оочень много знаков)
Ты можешь читать это число в бинарном режиме. Порциями по n байт.

Python
1
2
3
with open(fname, "rb") as f:
        for chunk in iter(lambda: f.read(4096), b""):
            что-то делаем с прочитанным чанком в 4 kb
2
5514 / 2867 / 571
Регистрация: 07.11.2019
Сообщений: 4,752
16.03.2021, 08:19
alilxxey, такая программа уже есть.
Code
1
man split
0
16.03.2021, 09:43

Не по теме:

Цитата Сообщение от Garry Galler Посмотреть сообщение
Ты можешь читать это число в бинарном режиме.
Хм, а если файлик в UTF-8? По идее в бинарном режиме получится каша.

0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
16.03.2021, 10:30
Лучший ответ Сообщение было отмечено alilxxey как решение

Решение

Цитата Сообщение от Arsegg Посмотреть сообщение
По идее в бинарном режиме получится каша.
Файл в utf-8. Число ПИ до 1086 знака из википедии:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
>>>  with open("c:/nums.txt", "rb") as f:
    for chunk in iter(lambda: f.read(10), b""):
        print(chunk)
 
        
b'3,14159265'
b'3589793238'
b'4626433832'
b'7950288419'
b'7169399375'
b'1058209749'
b'4459230781'
b'6406286208'
b'9986280348'
b'2534211706'
b'7982148086'
b'5132823066'
b'4709384460'
b'9550582231'
b'7253594081'
b'2848111745'
b'0284102701'
b'9385211055'
b'5964462294'
b'8954930381'
b'9644288109'
b'7566593344'
b'6128475648'
b'2337867831'
b'6527120190'
b'9145648566'
b'9234603486'
b'1045432664'
b'8213393607'
b'2602491412'
b'7372458700'
b'6606315588'
b'1748815209'
b'2096282925'
b'4091715364'
b'3678925903'
b'6001133053'
b'0548820466'
b'5213841469'
b'5194151160'
b'9433057270'
b'3657595919'
b'5309218611'
b'7381932611'
b'7931051185'
b'4807446237'
b'9962749567'
b'3518857527'
b'2489122793'
b'8183011949'
b'1298336733'
b'6244065664'
b'3086021394'
b'9463952247'
b'3719070217'
b'9860943702'
b'7705392171'
b'7629317675'
b'2384674818'
b'4676694051'
b'3200056812'
b'7145263560'
b'8277857713'
b'4275778960'
b'9173637178'
b'7214684409'
b'0122495343'
b'0146549585'
b'3710507922'
b'7968925892'
b'3542019956'
b'1121290219'
b'6086403441'
b'8159813629'
b'7747713099'
b'6051870721'
b'1349999998'
b'3729780499'
b'5105973173'
b'2816096318'
b'5950244594'
b'5534690830'
b'2642522308'
b'2533446850'
b'3526193118'
b'8171010003'
b'1378387528'
b'8658753320'
b'8381420617'
b'1776691473'
b'0359825349'
b'0428755468'
b'7311595628'
b'6388235378'
b'7593751957'
b'7818577805'
b'3217122680'
b'6613001927'
b'8766111959'
b'0921642019'
b'89'
>>>
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.03.2021, 10:30
Помогаю со студенческими работами здесь

Разделить 2д вектор на равные части
Здрасте, как можно разделить 2д вектор на заданное количество равных частей, и получить их значения?

Разделить список на две части
Здравствуйте! Подскажите пожалуйста, как реализовать задачу. Есть список чисел. Надо разбить его на 2 кучи в минимальной разностью. И...

Как разделить матрицу на равные части
Добрый день! Имеется .mat - фаил c размерностью (256, 256). Содержит в себе изображение сейсмического разреза. Как данную матрицу...

Разделить список на равные части, сохранив порядок
У меня есть отсортированный по возрастанию список, например Нужно узнать, возможно ли разделить его на 5 равных частей, в каждой...

Разделить байтовый массив на части и поместить с список
Есть байтовый массив massiv = bytearray() Нужно разделить этот массив на части, которые по длине меньше некоторого числа N. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru