-18

Замена заполнению нулями 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")

Дубликаты не найдены

+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
0
pathlib появился не так давно, а на Python 2 его нет вовсе. Совет хороший, но не однозначный
раскрыть ветку 2
0

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

раскрыть ветку 2
+1

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

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

Вроде бы ты открыл файл на запись в текстовом виде, что означает, что записываться будут символы. Ты записываешь "0". Это, на всякий случай, не нулевой байт. Если хочешь чистые нули в битовом представлении, то записывай "\0"

А зачем тебе это?)

раскрыть ветку 7
+5
А зачем тебе это?)

Больше интересует, зачем нам это?

+2
Просто)
0
(
0
Репутация -15
раскрыть ветку 2
0

Ты хорошее дело делаешь, учишься. Только ты совсем неправильно место выбрал чтобы делиться этим.

Это развлекательный сайт, а ты нам свои первые шаги в костылях показываешь.

раскрыть ветку 1
0
Да просто первый пост написал
+1
Сейчас даже баш закашлялся
раскрыть ветку 1
-2
)
0
В продолжение топового комментария: а еще не выводи "введите число" функцией print. Если уж очень хочешь юзать input(), то у него есть необязательный аргумент типа str, который выводится на экран при исполнении. Т.е. можно
var = int(input("Enter a number"))

А еще переменная, обозванная null, для важного значения при исполнении программы, - не труъ. Лучше хотя бы lenght.
раскрыть ветку 1
+1
Я знаю)
0

Весь этот гениальный скрипт сводится к одной команде баша для вывода заданного числа нолей (строковых, не 0-байт)

printf '0%.0s' {1..100} > /path/to/file

Первый 0 может быть заменен на любой hex символ (\x30)

раскрыть ветку 2
0

Весь этот гениальный скрипт сводится к использованию dd

раскрыть ветку 1
0

Тогда тебе нужен файл с нужным контентом или файлообразный объект

Похожие посты
Похожие посты закончились. Возможно, вас заинтересуют другие посты по тегам: