• Как при помощи bash создать и трансформировать дерево директорий в .json?

    @abcd0x00
    Нужно написать пару функций, одна из который рекурсивная. Одна функция отвечает за вывод директории, а другая - за вывод файла. Директорная функция вызывает саму себя для директорий и файловую функцию - для файлов. А файловая функция возвращает путь к файлу.

    Ты просто выведи дерево файлов на экран без всякого json'а с помощью этих функций. Когда будет готово, увидишь, куда нужно вставить скобки, запятые и кавычки, чтобы из этого json получился.
    Ответ написан
    Комментировать
  • Как понять файловые системы Linux?

    @abcd0x00
    Есть книжка по архитектуре UNIX, вот в ней можешь найти все принципы устройства.
    "Архитектура операционной системы UNIX." Бах Морис

    Можешь и какие-нибудь упрощённые книжки поискать для поверхностного изучения.


    1. Если директива и файл это просто inode с разным флагом внутри него, тогда откуда VFS или ядро знает что условно в папке /etc/ лежат всякие файлы(другие inodes) - это я пока не понял, не могу найти ни каких внутренних ссылок между собой файлов и директорий ?!

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

    Где вообще этот жуткий "/" хранится?

    В файловой системе (в заголовке) записан адрес на диске, где начинается самый первый inode. Потом он читается и из него получаются адреса последующих inode.
    А сам inode представляет из себя метаданные (данные о данных), где указаны всякие флажки и адрес на диске, где хранится уже содержимое файла.
    Ответ написан
    Комментировать
  • Как передать значение переменной из одной функции в другую?

    @abcd0x00
    Функция что-то принимает и что-то возвращает. Только так функции должны обмениваться данными между собой. То, что возвращает одна функция, должно передаваться в виде аргумента в другую функцию.

    Пример
    #include <stdio.h>
    
    int func1()
    {
        return 5;
    }
    
    int func2(int x)
    {
        return x * 2;
    }
    
    int func3(int x)
    {
        return x * 3 + 1;
    }
    
    int main(void)
    {
        printf("%d\n", func3(func2(func1())));
        return 0;
    }


    [guest@localhost c]$ .ansi t.c -o t
    [guest@localhost c]$ ./t
    31
    [guest@localhost c]$

    Ответ написан
    Комментировать
  • Почему не срабатывает код?

    @abcd0x00
    Поставь себе нормальную среду с нормальным компилятором. VS просто пытается пользователя к себе привязать, навязывая свои "безопасные" функции, которые есть только в ней.
    Ответ написан
    Комментировать
  • Как правильно решить задачу по поиску двух максимальных чисел в списке?

    @abcd0x00
    Находит два максимальных числа.
    >>> def f(seq):
    ...     m1 = m2 = None
    ...     for i in seq:
    ...         if m2 is None:
    ...             m2 = i
    ...         elif m1 is None:
    ...             if i > m2:
    ...                 m1, m2 = m2, i
    ...             else:
    ...                 m1 = i
    ...         elif i > m2:
    ...             m1, m2 = m2, i
    ...         elif i > m1:
    ...             m1 = i
    ...     return (m1, m2)
    ... 
    >>> a = [1, 2, 39, 4, 13, 4, 5, 6, 7, 3, 23, 2]
    >>> 
    >>> f(a)
    (23, 39)
    >>>
    Ответ написан
    2 комментария
  • Массовое редактирование симлинков в Debian - КАК?

    @abcd0x00
    Сделай скрипт, который переделывает одну ссылку. Просто ты ему подаёшь адрес ссылки, а он её превращает в правильную ссылку. Как сделаешь, выполни команду поиска ссылок, где для каждой найденной ссылки вызывается этот скрипт.
    Ответ написан
    Комментировать
  • Как удалить все нулевые элементы из словаря?

    @abcd0x00
    Нужно пройти его рекурсивно.
    >>> def f(d):
    ...     for i in set(d):
    ...         e = d[i]
    ...         if isinstance(e, dict):
    ...             f(e)
    ...         elif e == 0:
    ...             del d[i]
    ... 
    >>> d = {'user1': {'var1': 2,
    ...                'var2': 0,
    ...                'var3': 1,
    ...                'var4': 0},
    ...      'user2': {'var1': 0,
    ...                'var2': 1,
    ...                'var3': 0,
    ...                'var4': 0},
    ...      'user3': {'var1': 1,
    ...                'var2': 0,
    ...                'var3': 0,
    ...                'var4': 0}}
    >>> 
    >>> f(d)
    >>> d
    {'user3': {'var1': 1}, 'user2': {'var2': 1}, 'user1': {'var1': 2, 'var3': 1}}
    >>>
    Ответ написан
    2 комментария
  • Как вывести первые буквы слов строки?

    @abcd0x00
    Выводит первые буквы слов.
    #include <stdio.h>
    #include <ctype.h>
    
    int main(void)
    {
        int c, wassp;
    
        wassp = 1;
        while ((c = getchar()) != EOF) {
            if (isspace(c))
                wassp = 1;
            else if (wassp) {
                wassp = 0;
                putchar(c);
            }
        }
        putchar('\n');
        return 0;
    }


    Вывод
    [guest@localhost c]$ .ansi t.c -o t
    [guest@localhost c]$ echo "abcd efgh ijkl" | ./t
    aei
    [guest@localhost c]$
    Ответ написан
    Комментировать
  • Как с помощью рекурсии удалить последний элемент списка?

    @abcd0x00
    Как с помощью рекурсии удалить последний элемент списка?

    Нужно передавать в каждый вызов список, текущую позицию и длину списка. То есть рекурсия должна переводить текущую позицию вперёд, пока она не станет меньше длины на единицу.
    Ответ написан
  • Ошбка в модуле re raise error, v # invalid expression?

    @abcd0x00
    rx = r'\. %s (.+\n)+[}]'% clss

    Там есть re.escape() специально для таких случаев. То есть до подстановки нужно выполнить экранирование.

    Немного по коду

    Вообще, лучше перейти на третий питон, так как во втором всё хуже сделано. Даже те же регулярные выражения во втором питоне ищут по ASCII, а в третьем - по Unicode. Во втором нужно больше всяких телодвижений делать. Но самое главное, что они потом (эти знания), не используются, так как удалены из питона вообще. То есть учишь всё это зря.
    То есть иными словами, зачем тебе знать, что для поиска в Unicode нужно передавать флаг, если этот флаг, начиная с третьего питона, не используется вообще никогда? Время на изучение потратишь - а смысла в этом никакого нет. Лучше потратить время на что-то, что используется.
    По самому коду видно, что учить тебе ещё не переучить. И даже не питон, а сами парадигмы, чтобы не писать такие монолиты, привязанные к консоли. Завтра будет задание "написать то же самое, только чтобы выводило не на экран, а в файл, сеть или базу данных", и придётся тебе писать всё заново, потому что ты к консоли привязал всё изначально.
    Ответ написан
  • Можно ли использовать конструкцию with as на selenium?

    @abcd0x00
    Чтобы определить, можно ли использовать оператор with с объектом obj, нужно просто выполнить obj.__enter__.
    Если метод есть, то можно.

    Это пример:
    >>> f = open('/etc/passwd')
    >>> f.__enter__
    <built-in method __enter__ of _io.TextIOWrapper object at 0xb750e644>
    >>>
    Ответ написан
    Комментировать
  • Цена перехода с С# на C++?

    @abcd0x00
    Хотелось бы услышать ваше мнение, сложно ли будет перейти с C# на С++, так сказать цену вопроса.

    Переходи на C++/Qt, получится практически безболезненно. Есть основные вопросы, которые потребуют усилий. В C# нет указателей, а это очень обширная и мощная тема (в плане получения от программы нужного поведения), переплетающаяся с ассемблером - дряхлым царём программ. В книгах по C++ указатели не объясняются хорошо, потому что про них всё объяснено в книгах по C, из которого C++ и возник. Они не стали повторять материал, а просто ссылаются на сишную литературу. Так что для изучения самого C++ придётся неплохо окунуться в изучение C, естественно, если не хочешь иметь знания с пробелами, которые потом постоянно будут всплывать во время разработки "ой, я тут не знаю, ой, я там не знаю".
    Ответ написан
  • Vim. Какие варианты перенести текст?

    @abcd0x00
    Нужно записать макрос для одной строки и запустить его для каждой строки. В идеале, макрос записывается так, чтобы начинать действия в начале строки, а заканчивать действия в начале следующей строки (чтобы можно было его просто запускать и он строки преобразовывал последовательно друг за другом).

    В Vim'е есть запись макросов и в Emacs'е есть запись макросов.

    Как сделать сам макрос:
    1. Нужно поставить курсор на начало строки.
    2. Включить запись макроса.
    3. Через поиск строки найти начало тега "<img".
    4. Вернуться на открывающую угловую скобку.
    5. Начать выделение.
    6. Через поиск перейти к закрывающей угловой скобке.
    7. Перейти за закрывающую угловую скобку.
    8. Вырезать выделенное.
    9. Через поиск найти конец тега "span>".
    10. Перейти за закрывающую угловую скобку.
    11. Вставить содержимое буфера.
    12. Перейти в конец строки.
    13. Перейти на следующую строку.
    14. Вернуться в начало строки.
    15. Остановить запись макроса.

    Тут так много написано не потому, что надо много делать, а чтобы было всё понятно. На самом деле, это делается 10 секунд.

    Чем быстрее приучишься к макросам, когда будешь их записывать по несколько штук в день, тем быстрее будешь обрабатывать подобные тексты. Это очень мощное средство.

    В Vim'е макросы послабее, чем в Emacs'е, там их меньше сохранять можно, да и, вроде, нет какого-то мощного редактора, тогда как в Emacs'е для редактирования макросов есть несколько режимов, их можно писать в символьном виде как обычный текст (не только записывать действия), да и просто можно частично менять их и отлаживать.
    Ответ написан
  • Как правильно распарсить xml файл в Python?

    @abcd0x00
    Выбирает нужные события в документе.
    В нужных событиях выбирает нужные атрибуты.
    В нужных атрибутах выбирает нужный элемент.

    Код
    >>> import lxml.etree
    >>> 
    >>> text = """\
    ... <eventsList>
    ... <event>
    ...         <id>374648e7-0c33-403f-bec5-c580fcf9fc8b</id>
    ...         <date>2016-03-30T21:11:33.163+03:00</date>
    ...         <type>deletedPrintedItems</type>
    ...         <departmentId>3</departmentId>
    ...         <attribute>
    ...             <name>comment</name>
    ...             <value>sadasd</value>
    ...         </attribute>
    ...         <attribute>
    ...             <name>user</name>
    ...             <value>65d90cba-a421-4e4d-9d3e-14ddd6907280</value>
    ...         </attribute>
    ...         <attribute>
    ...             <name>openTime</name>
    ...             <value>Wed Mar 30 21:07:53 MSK 2016</value>
    ...         </attribute>
    ...         <attribute>
    ...             <name>tableNum</name>
    ...             <value>2</value>
    ...         </attribute>
    ...         <attribute>
    ...             <name>session</name>
    ...             <value>1.000000000</value>
    ...         </attribute>
    ...         <attribute>
    ...             <name>orderNum</name>
    ...             <value>4.000000000</value>
    ...         </attribute>
    ...         <attribute>
    ...             <name>reason</name>
    ...             <value>Со списанием</value>
    ...         </attribute>
    ...         <attribute>
    ...             <name>receiptsSum</name>
    ...             <value>0E-9</value>
    ...         </attribute>
    ...         <attribute>
    ...             <name>dishes</name>
    ...             <value>Салат Оливье</value>
    ...         </attribute>
    ...         <attribute>
    ...             <name>isBanquet</name>
    ...             <value>0E-9</value>
    ...         </attribute>
    ...         <attribute>
    ...             <name>withWriteoff</name>
    ...             <value>1.000000000</value>
    ...         </attribute>
    ...         <attribute>
    ...             <name>penalty</name>
    ...             <value>0E-9</value>
    ...         </attribute>
    ...         <attribute>
    ...             <name>rowCount</name>
    ...             <value>1.000000000</value>
    ...         </attribute>
    ...         <attribute>
    ...             <name>numGuests</name>
    ...             <value>4.000000000</value>
    ...         </attribute>
    ...         <attribute>
    ...             <name>auth</name>
    ...             <value>65d90cba-a421-4e4d-9d3e-14ddd6907280</value>
    ...         </attribute>
    ...         <attribute>
    ...             <name>orderSumAfterDiscount</name>
    ...             <value>0E-9</value>
    ...         </attribute>
    ...         <attribute>
    ...             <name>terminal</name>
    ...             <value>49c7d0ba-a469-517f-0153-61a7bcb29ccb</value>
    ...         </attribute>
    ...         <attribute>
    ...             <name>sum</name>
    ...             <value>70.000000000</value>
    ...         </attribute>
    ...         <attribute>
    ...             <name>method</name>
    ...             <value>Списание за счет заведения</value>
    ...         </attribute>
    ...         <attribute>
    ...             <name>orderId</name>
    ...             <value>e55c392f-ea8a-4c96-aecd-2bd0b6ffd2cd</value>
    ...         </attribute>
    ...         <attribute>
    ...             <name>waiter</name>
    ...             <value>5daf4283-ae8c-4a95-83e5-052fb4a33570</value>
    ...         </attribute>
    ...     </event>
    ...     <event>
    ...         <id>61d3cb56-74dd-4d20-86ae-217c37f15f01</id>
    ...         <date>2016-03-30T21:11:41.090+03:00</date>
    ...         <type>frontLogout</type>
    ...         <departmentId>3</departmentId>
    ...         <attribute>
    ...             <name>user</name>
    ...             <value>65d90cba-a421-4e4d-9d3e-14ddd6907280</value>
    ...         </attribute>
    ...         <attribute>
    ...             <name>session</name>
    ...             <value>1.000000000</value>
    ...         </attribute>
    ...         <attribute>
    ...             <name>terminal</name>
    ...             <value>49c7d0ba-a469-517f-0153-61a7bcb29ccb</value>
    ...         </attribute>
    ...     </event>
    ... </eventsList>
    ... """
    >>> 
    >>> doc = lxml.etree.fromstring(text)
    >>> events = doc.xpath(r'//event/type[text() = "deletedPrintedItems"]/..')
    >>> 
    >>> for event in events:
    ...     comments = event.xpath(r'.//attribute/name[text() = "comment"]'
    ...                            r'/../value/text()')
    ...     print(comments)
    ... 
    ['sadasd']
    >>>

    Ответ написан
  • Откуда узнавать о библиотеках?

    @abcd0x00
    Свежие черновики стандартов C
    www.open-std.org/JTC1/SC22/WG14

    Стандарт C89 (черновик)
    flash-gordon.me.uk/ansi.c.txt

    Прочитай английские страницы по C
    https://en.wikipedia.org/wiki/C_%28programming_lan...
    https://en.wikipedia.org/wiki/ANSI_C

    Это FAQ по вопросам из comp.lang.c
    c-faq.com

    Ещё можешь на канал #c зайти на irc.freenode.net, там обычно собирают всю последнюю информацию по языку.
    Ответ написан
    Комментировать
  • Как добавить распаковку для объекта своего класса?

    @abcd0x00
    Это тебе полный вариант, если что сложное делать соберёшься.
    >>> class A:
    ...     
    ...     def __iter__(self):
    ...         self.it = iter('abc')
    ...         return self
    ...     
    ...     def __next__(self):
    ...         return next(self.it)
    ... 
    >>> a = A()
    >>> print(*a)
    a b c
    >>>
    Ответ написан
    Комментировать
  • Как осуществить фукцию по добавлению элемета в конец списка?

    @abcd0x00
    >>> class UnorderedList:
    ...     def __init__(self):
    ...         self.head = None
    ...     
    ...     def append(self, item):
    ...         newnode = Node(item)
    ...         if self.head is None:
    ...             self.head = newnode
    ...             return
    ...         current = self.head
    ...         while True:
    ...             nextnode = current.getNext()
    ...             if nextnode is None:
    ...                 break
    ...             current = nextnode
    ...         current.setNext(newnode)
    ...     
    ...     def print(self):
    ...         current = self.head
    ...         while current is not None:
    ...             print(current.getData(), end=' ')
    ...             current = current.getNext()
    ...         print()
    ... 
    >>> class Node:
    ...     def __init__(self, data):
    ...         self.data = data
    ...         self.next = None
    ...     
    ...     def getData(self):
    ...         return self.data
    ...     
    ...     def getNext(self):
    ...         return self.next
    ...     
    ...     def setData(self, data):
    ...         self.data = data
    ...     
    ...     def setNext(self, node):
    ...         self.next = node
    ... 
    >>> lst = UnorderedList()
    >>> lst.append(1)
    >>> lst.append(2)
    >>> lst.append(3)
    >>> lst.print()
    1 2 3 
    >>>
    Ответ написан
  • Как с помощью регулярных выражений убрать квадратные скобки и содержимое?

    @abcd0x00
    >>> import re
    >>> 
    >>> s = "one [two] three [1] [2]"
    >>> 
    >>> re.sub(r'\[\d+\]', '', s)
    'one [two] three  '
    >>>
    Ответ написан
    Комментировать
  • Почему не срабатывает isalpha?

    @abcd0x00
    >>> 'переход'.isalpha()
    False
    >>> u'переход'.isalpha()
    True
    >>> unicode('переход', 'utf-8').isalpha()
    True
    >>>
    Ответ написан
    Комментировать
  • На чем пишутся консольные утилиты под linux?

    @abcd0x00
    К примеру как сделать так, что бы программа была доступна для выполнения из любой папки?

    Её нужно установить. А чтобы установить, должен быть установщик. Можешь использовать make для этого - это классический вариант.
    make
    sudo make install
    Ответ написан
    Комментировать