Есть ли лучший способ разделить детали из списка каталогов в Python - PullRequest
1 голос
/ 01 марта 2020

Я пытаюсь преобразовать список файлов в структурированные данные. Это стандартный список файлов с windows, как показано ниже.

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

Мой текущий код выглядит следующим образом.

def extract_columns_from_file_name(text, curr_dir, mappedProductNames):    

text = re.sub('\s+',' ',text)
space_location = text.find(" ")
date = text[0:space_location]
text = text[space_location+1:len(text)]

space_location = text.find(" ")
timeA = text[0:space_location]
text = text[space_location+1:len(text)]

space_location = text.find(" ")
timeB = text[0:space_location]
text = text[space_location+1:len(text)]

time = timeA + " " + timeB

space_location = text.find(" ")
size = text[0:space_location]
size = re.sub(',','',size)
text = text[space_location+1:len(text)]

Текст, который я конвертирую, выглядит следующим образом.

28/11/2019  05:26 PM     2,074,273,364 jdev_suite_122130_win64.exe

Ответы [ 3 ]

1 голос
/ 01 марта 2020

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

fields = text.split()
print (fields)

Вывод будет, и вы можете использовать его как хотите

['28/11/2019', '05:26', 'PM', '2,074,273,364', 'jdev_suite_122130_win64.exe']     
1 голос
/ 01 марта 2020

Вы можете сделать это с помощью регулярных выражений следующим образом:

import re

text = "28/11/2019  05:26 PM     2,074,273,364 jdev_suite_122130_win64.exe"

m = re.match(r'(\d+/\d+/\d+) +(\d{2}:\d{2} (?:AM|PM)) +([0-9,]+) ([\w.]+)', text)
if m:
    print(m.groups())

Вывод:

('28/11/2019', '05:26 PM', '2,074,273,364', 'jdev_suite_122130_win64.exe')
0 голосов
/ 01 марта 2020

Используйте Pandas для лучшего манипулирования данными

import pandas as pd
df = pd.read_csv(filename, sep=' ', header=None)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...