Il 13/04/2021 01:11, Rich Shepard ha scritto:
I'm running Slackware64-14.2 and keep a list of installed packages. When a
package is upgraded I want to remove the earlier version, and I've not
before written a script like this. Could there be a module or tool that
already exists to do this? If not, which string function would be best
suited to the task?

Here's an example:
atftp-0.7.2-x86_64-2_SBo.tgz
atftp-0.7.4-x86_64-1_SBo.tgz

and there are others like this. I want the python3 script to remove the
first one. Tools like like 'find' or 'sort -u' won't work because while the
file name is the same the version or build numbers differ.

All suggestions welcome.

Rich


If I understand your problem correctly, the problem would be dealing with numbers as such in file names. This is just a track but it might help you. This example splits filenames into strings and numbers into tuples, appends the tuple into a list, and then sorts the list:

files = ['atftp-0.7.4-x86_64-2_SBo.tgz', 'atftp-0.7.2-x86_64-1_SBo.tgz']
digit = None
da = ''
tfn = tuple()
ltafn = list()
for f in files:
    for c in f:
        if str(c).isdigit():
            if not digit:
                if len(da) > 0:
                    tfn += (da,)
                    da = ''
                digit = True
                da += c
            else:
                da += c
        else:
            if digit:
                if len(da) > 0:
                    tfn += (int(da),)
                    da = ''
                digit = False
                da += c
            else:
                da += c
    if len(da) > 0:
        if da.isdigit():
            tfn += (int(da),)
        else:
            tfn += (da,)
        da = ''
    ltafn += [tfn, ]
    tfn = ()

ltafn.sort()

for t in files:
    print(t)
print()
for t in ltafn:
    nn = ''
    for f in t:
        nn += str(f)
    print(nn)
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to