Преобразуйте значения в строковом кортеже, возвращенном findall, в int - PullRequest
0 голосов
/ 09 июля 2019

Я читаю список каталогов Unix и хочу извлечь размер файла, месяц, дату, час, мин и имена файлов с помощью регулярных выражений.

-rwxr-xr-x 1 jttoivon hyad-all    2356 Dec 11 11:50 add_colab_link.py
-rw-r--r-- 1 jttoivon hyad-all  164519 Dec 28 17:59 basics.ipynb

Я использую findall, и он работает нормально, за исключением того, что он возвращает кортеж со всеми строками. Я хочу преобразовать хранить целочисленные значения как int в кортеже. как мне это сделать?

def file_listing(filename="listing.txt"):

    list1=[]
    regex=re.compile("(\d+)\s(\w{3})\s+(\d{1,})\s(\d{2}):(\d{2})\s(\w*[.]?\w*)")

    with open(filename, "r") as f:
        for line in f:    # iterates through all the lines in the file
         list1.extend(regex.findall(line))

Код генерирует ('2356', 'Dec', '11', '11', '50', 'add_colab_link.py') но мне нужно (2356, 'Dec', 11, 11, 50, 'add_colab_link.py') то есть целочисленные значения как целые числа, а не строки

1 Ответ

1 голос
/ 10 июля 2019

Вызовите int() для элементов в кортеже, которые должны быть целыми числами.

with open(filename, "r") as f:
    for line in f:
        size, month, day, hour, minute, name = regex.search(line).groups()
        list1.append((int(size), month, int(day), int(hour), int(minute), name))
...