Изменение значений списка в Python - PullRequest
0 голосов
/ 09 января 2019

У меня есть список хэшей, таких как:

f71bc81a7e7d649f0d279b5861972eae  ./.bash_history
22bfb8c1dd94b5f3813a2b25da67463f  ./.bash_logout
1f98b8f3f3c8f8927eca945d59dcc1c6  ./.bashrc
f4e81ade7d6f9fb342541152d08e7a97  ./.profile
595dbcceb1b5921f7fad73ad17ec1fe4  ./.python_history
a23829cea89e42d79df01428e550191a  ./.viminfo

И мне нужно изменить все вторые «столбцы» (./.bash_history), чтобы они стали уникальными. Как ниже:

    f71bc81a7e7d649f0d279b5861972eae  App1
    22bfb8c1dd94b5f3813a2b25da67463f  App1
    1f98b8f3f3c8f8927eca945d59dcc1c6  App1
    f4e81ade7d6f9fb342541152d08e7a97  App1

Я не могу придумать способ сделать это простыми словами. (Запомните пробелы между хешем и именем). Я попытался нарезать его, перебрать и изменить значения, но не получил желаемого результата.

Что я пробовал:

import re
f = open("md5sum.txt","r")
read = f.read()
ar =  re.sub(r"\s+", "", read)
splitting = ar.split('.')
print(splitting[1])
for x in range(len(splitting)):
    if splitting[x] % 2 != 0:
        print("App1")

Любая помощь будет оценена. Спасибо.

Ответы [ 3 ]

0 голосов
/ 09 января 2019

Создать файл :

t = """f71bc81a7e7d649f0d279b5861972eae  ./.bash_history
22bfb8c1dd94b5f3813a2b25da67463f  ./.bash_logout
1f98b8f3f3c8f8927eca945d59dcc1c6  ./.bashrc
f4e81ade7d6f9fb342541152d08e7a97  ./.profile
595dbcceb1b5921f7fad73ad17ec1fe4  ./.python_history
a23829cea89e42d79df01428e550191a  ./.viminfo"""

fn = "md5sum.txt"
with open(fn,"w")as f:f.write(t)

Чтение и обработка файла строка за строкой :

data = []
with open(fn) as f, open("changed.txt","w") as w:
    for line in f:
        if line.strip():
            # split at spaces
            h, _ = line.strip().split()
            # ignore _ - simply give it a new one
            w.write(f"{h} all_the_same_name\n")

with open("changed.txt") as f: 
    print(f.read())

Выход:

f71bc81a7e7d649f0d279b5861972eae all_the_same_name
22bfb8c1dd94b5f3813a2b25da67463f all_the_same_name
1f98b8f3f3c8f8927eca945d59dcc1c6 all_the_same_name
f4e81ade7d6f9fb342541152d08e7a97 all_the_same_name
595dbcceb1b5921f7fad73ad17ec1fe4 all_the_same_name
a23829cea89e42d79df01428e550191a all_the_same_name
0 голосов
/ 09 января 2019

Вы можете сделать это с помощью str.replace() следующим образом:

f = open(r"md5sum.txt","r")
lines = f.readlines()
new_read = []
for line in lines:
    line = line.replace(line.split(' ')[2], 'Appl')
    new_read.append(line)

тогда это будет вывод new_read list:

['f71bc81a7e7d649f0d279b5861972eae  Appl', '22bfb8c1dd94b5f3813a2b25da67463f  Appl', '1f98b8f3f3c8f8927eca945d59dcc1c6  Appl', 'f4e81ade7d6f9fb342541152d08e7a97  Appl', '595dbcceb1b5921f7fad73ad17ec1fe4  Appl', 'a23829cea89e42d79df01428e550191a  Appl']
0 голосов
/ 09 января 2019

Я не уверен на 100%, какова ваша цель, но исходя из того, что, как я полагаю, вы хотите, я считаю, что этого кода будет достаточно.

replaced_value = 'App1'

with open('md5sum.txt') as fin:
  with open('md5sum_modified.txt', 'w') as fout:
    for line in fin:
      values = line.split()
      values[1] = replaced_value
      new_line = ' '.join(values)
      fout.write(new_line + '\n')
...