Невозможно объединить длинную строку в списке с короткой строкой в ​​списке - PullRequest
0 голосов
/ 29 октября 2018

Я написал скрипт Python для извлечения информации о жестком диске из файла журнала. Файл журнала, с которым я работаю, плохо отформатирован. Поэтому я ищу все значения вместе, как это:

lineDict = dict([(line) for line in enumerate(hd.readlines())])
x = json.dumps(lineDict, indent = 1)
y = re.findall(r'Caption=.*[c-zC-Z]:|FileSystem=NTFS|Size=\d+|FreeSpace=\d+',x,re.M)

Все мои значения свободного пространства и размера (общего размера) являются байтами, поэтому я должен пройти через них отдельно от других значений, чтобы быстро преобразовать их в целые числа, а затем преобразовать эти значения байтов в удобочитаемую форму. (MB, GB, и т.д. ...): Я возился с этими значениями «Свободное пространство» и «Общий размер», чтобы красиво отобразить вывод на экране, с разделителем каналов для «Общий размер» и «Свободное пространство»:

getBytes = re.findall(r'\d+',cropHdds)
getBytes = [int(x) for x in getBytes]
valsL = []
for vals in getBytes:
    hVals = convertBytes(vals)
    valsL.append(hVals)
    hrFixed = json.dumps(valsL, indent = 2)
    hrDisplay = replaceMany(hrFixed.strip(),[("\n",""),('"',''),("'",""),(']',''),('[','')])
    a = re.sub("\\s+", "", hrDisplay)
    b = textwrap.fill(a, 14)
    c = b.replace(","," | ")
    hrValsF = c.center(60)

Наконец, у меня есть два списка: Бессмыслицы:

['C:', 'D:', 'E:', 'F:', 'G:', 'Z:']

DriveInfoL:

['52.7GB | 119.7GB', '22.9GB | 80.0GB', '25.2GB | 50.0GB']

Я хочу объединить эти значения вместе, как в следующем примере:

C:,52.7GB | 119.7GB, D: 22.9GB | 80.0GB, E:'25.2GB | 50.0GB

У меня есть другая переменная, которая ищет «Тип файловой системы», я точно знаю, что у меня только 3 жестких диска NTFS (C, D, E). После поиска и ударов головой о клавиатуру очень долго. Я перепробовал много методов сортировки, таких как преобразование этих строк в кортеж или дикты, используя странные списки, которые в конечном итоге приводят к утечке памяти, а также попробовал некоторые творческие нотации фрагментов, так или иначе, я не могу понять это правильно, поэтому я ищу помощь, чтобы преодолеть это препятствие, у меня есть ощущение, что я слишком много работаю, и это должно быть решением. Заранее благодарим за помощь.

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Этот фрагмент создаст словарь, в котором ключом является буква диска, а значением является память:

DriveL = ['C:', 'D:', 'E:', 'F:', 'G:', 'Z:']
DriveInfoL = ['52.7GB | 119.7GB', '22.9GB | 80.0GB', '25.2GB | 50.0GB']
Drive_dict = {}
for i in range(3):
  Drive_dict[DriveL[i]] = DriveInfoL[i]

Только первые 3 заявки считаются. Если вы хотите использовать только диски NTFS, вам нужно найти способ выяснить, какие записи на вашем DriveL являются дисками NTFS.

0 голосов
/ 29 октября 2018

Вы можете использовать понимание списка, чтобы просмотреть оба списка одновременно

DriveL=['C:', 'D:', 'E:', 'F:', 'G:', 'Z:']
DriveInfoL=['52.7GB | 119.7GB', '22.9GB | 80.0GB', '25.2GB | 50.0GB']
Combined=[(x,y) for (x,y) in zip(DriveL,DriveInfoL)]

>>>Combined
>>>[('C:', '52.7GB | 119.7GB'),
('D:', '22.9GB | 80.0GB'),
('E:', '25.2GB | 50.0GB')]
...