Python + строковая манипуляция cmd, что я должен был сделать по-другому

1

Я новичок в программировании в целом, и просмотр видеороликов CTF вдохновил меня начать с python и хорошо разбираться в командной строке (я на OSX кстати). В прошлом я использовал среду anaconda spyder для школы (Python 2.7). Когда я настраивал пиво, пип и питон, я понял, что у меня есть куча пакетов от Anaconda для 2,7 на пипе, но нет ни на 3,6 на pip3. Я решил pip list и получил таблицу для всех (установленных мною) пакетов anaconda. Это то, что ты получаешь:

    Package                            Version                
---------------------------------- -----------------------
alabaster                          0.7.10                 
anaconda-client                    1.6.5                  
anaconda-navigator                 1.6.8                  
anaconda-project                   0.8.0                  
appnope                            0.1.0                  
appscript                          1.0.1                  
asn1crypto                         0.22.0                 
astroid                            1.5.3                  
astropy                            2.0.2                  
Babel                              2.5.0                  
backports-abc                      0.5                    
backports.functools-lru-cache      1.4                    
backports.shutil-get-terminal-size 1.0.0                  
backports.ssl-match-hostname       3.5.0.1                
beautifulsoup4                     4.6.0                  
bitarray                           0.8.1    
...

Тогда у меня возникла идея: могу ли я преобразовать этот текст в строку в этом формате. "Package1 Package2 Package3 Package4", поэтому я могу pip3 все пакеты. Это стало проблемой для манипуляций с строкой, поскольку я понял, что это, вероятно, неэффективно, просто установить пакеты 150+ и просто ускорить загрузку anaconda для 3.7. (Совместимость, бесполезная, трудоемкая...)

Поэтому я начал с того, что извлек список с ">" в терминале в новый файл, который я сделал, а затем удалил первые две строки с помощью функции tail в терминале. Что я мог сделать с python? Я пробовал много вещей, но он никогда не работал и нашел это, что убило все мотивации, чтобы отлаживать/думать.

tail -n +2 "$FILE" > "$FILE.tmp" && mv "$FILE.tmp" "$FILE"

После этого я сделал этот простой скрипт python для преобразования в формат, который я искал, удалив все версии и сделав их одной единственной строкой.

with open("file.txt","r+") as f:
    lines=f.readlines()
    new_string=''
    for i in range(len(lines)):
        lines[i]=lines[i].split(" ", 1)
        del lines[i][1]
        new_string += lines[i][0] + ' '


    print new_string

Пожалуйста, дайте мне знать, есть ли что-нибудь, что я мог бы сделать в окне терминала, или почему мой скрипт python плох. My for loop IMO кажется странным с i а lines[i][0] - уродливые IMO, потому что вы, естественно, не понимаете, что это значит.

Любая помощь или другой метод будут высоко оценены. Спасибо заранее.

** TL;DR: любое понимание:

1) простой способ удалить n первых строк txt файла с помощью python или терминала

2) Почему мой код Python уродлив, есть ли терминальный эквивалент? **

Теги:
terminal

2 ответа

0

Вот одна команда оболочки оболочки, которая будет делать то, что вы хотите (установите весь пакет pip с pip3, если я правильно проиндексирую)

pip list | awk 'NR>2' | awk '{print $1}' | xargs pip3 install

awk 'NR>2' возьмет вход pip list пинов и начнет с третьей строки, awk '{print $1}' напечатает имя пакета, и, наконец, xargs возьмет имя каждого пакета и установит пакет. Попробуйте запустить его с помощью pip вместо pip3 чтобы увидеть, что все Requirement already satisfied чтобы убедиться, что это работает.

0

простой способ удалить n первых строк txt файла с помощью python или терминала

Это откроет ваш файл и сохранит все строки после n строк в новый файл.

lines = open('textfile.txt').readlines()
open('newfile.txt', 'w').writelines(lines[n:])

Как я могу "убрать" этот код Python:

with open("file.txt","r+") as f:
lines=f.readlines()
new_string=''
for i in range(len(lines)):
    lines[i]=lines[i].split(" ", 1)
    del lines[i][1]
    new_string += lines[i][0] + ' '

Это может быть записано как: (итерация по линиям списка и сохранение их всех в одну строку после этого, если хотите).

lines = []
with open('file.txt', 'r+') as f:
    # You can actually process the file line by line without saving it into a list:
    for line in f:
        # For clearer code, you can index the split function here:
        line = line.split(' ', 1)[0]
        lines.append(line)

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню