Замена заполнению нулями dd

Знали ли вы или нет, но новый,чистый ни чем ни забитый архив в котором вы заранее указали размер или вообще любой пустой файл это просто набор нулей,число которых эквивалентно числу в байтах(размер файла).

Ну так вот,на Python3 можно создать постоянную замену(возможно не пригодится),но только файл от dd все-таки заполняется некоторыми символами(конфигурации).

Ну так вот:

import os

#Ввод имени файла
print("Введите имя файла")
name = str(input())
#Путь до файла
path = str(os.getcwd()) + "/" + name
#Ввод кол-ва нулей
print("Введите кол-во нулей")
null = int(input())
file = open(path, "w", encoding = " utf-8")

i = 0
while i < null:
print(i)
i = i + 1
file.write("0")

Программирование на python

626 постов11.8K подписчиков

Добавить пост

Правила сообщества

Публиковать могут пользователи с любым рейтингом. Однако!


Приветствуется:

• уважение к читателям и авторам

• конструктивность комментариев

• простота и информативность повествования

• тег python2 или python3, если актуально

• код публиковать в виде цитаты, либо ссылкой на специализированный сайт


Не рекомендуется:

• допускать оскорбления и провокации

• распространять вредоносное ПО

• просить решить вашу полноценную задачу за вас

• нарушать правила Пикабу

Вы смотрите срез комментариев. Показать все
5
Автор поста оценил этот комментарий

Попробую дать фидбек:
1. Нельзя использовать интерфейс пикабу для нормального кода, т.к. теряется форматирование, да и подсветки нет
2. Цикл while в таком виде не идиоматичен, следует использовать for _ in range(100)
3. Запись по одному символу крайне неэффективна с учётом блочной природы файлов и низкой скорости интерпретации
4. Запись в текстовом формате для бинарного по своей сути файла неидиоматична

5. Преобразование пути в абсолютный лишнее и может быть даже вредным. Следует использовать open с относительным путём

6. Использование / как разделителя элементов пути приведёт к ошибкам на других платформах. Следует использовать os.path.join

7. Использование явного input в такой программе -- зло, от этого наоборот по возможности отказываются, следует использовать аргументы командной строки

раскрыть ветку (10)
1
Автор поста оценил этот комментарий
Нет, нужно использовать pathlib.Path, а os.path более не трогать.
раскрыть ветку (3)
Автор поста оценил этот комментарий
pathlib появился не так давно, а на Python 2 его нет вовсе. Совет хороший, но не однозначный
раскрыть ветку (2)
Автор поста оценил этот комментарий

А, ну и с pathlib есть особенность, я столкнулся с багом в venv (причем в локальном pipenv'е все ок), что open(path) может кинуть исключение.

Обход это либо: open(str(path)) либо path.open() (предпочтительный вариант).

Автор поста оценил этот комментарий

Так на 2-ке сейчас уже лучше и не писать ничего нового. Допустимо только для легаси.

DELETED
Автор поста оценил этот комментарий

3 - скорее всего пофиг, все равно сначала в кэш пишется, потом из него блоками сбрасывается на устройство.

раскрыть ветку (2)
1
Автор поста оценил этот комментарий

Не совсем, т.к. будет большое кол-во вызовов ядра для write(fd...). А на диск то да, уже будет оптимизировано для блочного сброса.

раскрыть ветку (1)
DELETED
Автор поста оценил этот комментарий

Ты прав. Я тут набросал мини-пример https://gist.github.com/Flid/1e4862beb00a63b01955b8c19550217...

Ну то есть я знал что разница будет, но не ожидал разницу в сотни раз.

Автор поста оценил этот комментарий
Ну и если автор хочет просто пустой файл, то можно сделать проще.
Открыть, переместиться в desired_len-1, write(b"\0").
1
Автор поста оценил этот комментарий
А так можно и for
1
Автор поста оценил этот комментарий
Ну цикл while более универсален,и он мне нравится
Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку