0

Dear Friends,
I have a sequence of two values as the following:

00001.doc
d:\pathtofile\image50.jpg

00002.doc
d:\pathtofile\image38.jpg

00003.doc
d:\pathtofile\image40.jpg

...

I would like to add the values to a list, sort the list by second value and rename the first value accordingly.
For example, the following steps:
Step 1
'00002.doc', 'd:\pathtofile\image38.jpg'
'00003.doc', 'd:\pathtofile\image40.jpg'
'00001.doc', 'd:\pathtofile\image50.jpg'

Step 2
'a00001.doc', 'd:\pathtofile\image38.jpg'
'a00002.doc', 'd:\pathtofile\image40.jpg'
'a00003.doc', 'd:\pathtofile\image50.jpg'

The pathtofile is always the same, so I will not need (probably) to break it and extract the filename.
Thank you for your help.
G.

3
Contributors
2
Replies
5
Views
4 Years
Discussion Span
Last Post by vegaseat
Featured Replies
  • This should get you partway there: import os import pprint data_str = '''\ 00001.doc d:\pathtofile\image50.jpg 00002.doc d:\pathtofile\image38.jpg 00003.doc d:\pathtofile\image40.jpg ''' data_list = [] temp_list = [] for ix, line in enumerate(data_str.split()): #print(line, len(temp_list), ix, ix%2) # test if ix % 2 == 0: temp_list.append('a' + line) if ix % 2 … Read More

  • 1

    If I understand this right, you want something like this ... import pprint mylist = [['a00002.doc', 'image38.jpg'], ['a00003.doc', 'image40.jpg'], ['a00001.doc', 'image50.jpg']] newlist = [] for ix, item in enumerate(mylist): #print(item[0]) # testing item[0] = "a%05d.doc" % (ix+1) #print(item[0]) # testing newlist.append(item) pprint.pprint(newlist) ''' result ... [['a00001.doc', 'image38.jpg'], ['a00002.doc', 'image40.jpg'], ['a00003.doc', … Read More

1

This should get you partway there:

import os
import pprint

data_str = '''\
00001.doc
d:\pathtofile\image50.jpg

00002.doc
d:\pathtofile\image38.jpg

00003.doc
d:\pathtofile\image40.jpg
'''

data_list = []
temp_list = []
for ix, line in enumerate(data_str.split()):
    #print(line, len(temp_list), ix, ix%2)  # test
    if ix % 2 == 0:
        temp_list.append('a' + line)
    if ix % 2 == 1:
        folder, filename = os.path.split(line)
        temp_list.append(filename)
        data_list.append(temp_list)
        # reset temp_list
        temp_list = []

pprint.pprint(data_list)

print('-'*36)

# sort by second element (index = 1)
data_list_sorted = sorted(data_list, key = lambda x: x[1])

pprint.pprint(data_list_sorted)

''' my result -->
[['a00001.doc', 'image50.jpg'],
 ['a00002.doc', 'image38.jpg'],
 ['a00003.doc', 'image40.jpg']]
------------------------------
[['a00002.doc', 'image38.jpg'],
 ['a00003.doc', 'image40.jpg'],
 ['a00001.doc', 'image50.jpg']]
'''

For the rest send the list of lists through a loop again and sequentially rename/renumber the first elements.

1

If I understand this right, you want something like this ...

import pprint

mylist = [['a00002.doc', 'image38.jpg'],
['a00003.doc', 'image40.jpg'],
['a00001.doc', 'image50.jpg']]

newlist = []
for ix, item in enumerate(mylist):
    #print(item[0])  # testing
    item[0] = "a%05d.doc" % (ix+1)
    #print(item[0])  # testing
    newlist.append(item)

pprint.pprint(newlist)

''' result ...
[['a00001.doc', 'image38.jpg'],
 ['a00002.doc', 'image40.jpg'],
 ['a00003.doc', 'image50.jpg']]
'''
This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.