Python Forum
Python Folders Splitter to Files Splitter
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Python Folders Splitter to Files Splitter
#1
Hello,

Based on this great piece of code: Python Folder Splitter

I would like to work on files and not on folders.

The code is so short:

#gadgetmiser's idempotent splitter

import os
from shutil import move

wd = os.getcwd()
dirs = os.listdir(wd)
lastitemindex = len(dirs) - 1


drive = wd.split(':')[0]
results = ':\\c64Romset_output\\'
filesperfolder = 255
letterstodisplay = 15

firstfn_2l = dirs[0][:letterstodisplay].split("(")[0].strip().upper()[:4]
lastfn_2l = dirs[:filesperfolder - 1][-1][:letterstodisplay].split("(")[0].strip().upper()[:4]

firsttarget = (firstfn_2l + " to " + lastfn_2l).strip()
os.mkdir(drive + results)
os.mkdir(drive + results + firsttarget)
log_output = open(drive + results + "log_output.txt","w+")


tally = 0
counter = 0
target = firsttarget


for folder in dirs:
    tally += 1

    if counter == filesperfolder:
            p1 = folder[:letterstodisplay].split("(")[0].upper().strip()[:4]
            folderpos = dirs.index(folder)
            try:
                p2 =  dirs[folderpos + filesperfolder - 1][:letterstodisplay].split("(")[0].upper().strip()[:4]
            except IndexError:
                p2 =  dirs[lastitemindex][:letterstodisplay].split("(")[0].upper().strip()[:4]
            newdir = (p1 + " to " + p2).strip()
            print(str(tally) + " files processed ... making new dir called: " + newdir)
            target = newdir
            counter = 0
    newfname = folder.split("(")[0].strip()
    move(folder, drive + results + target + "\\" + newfname)
    print("Moved " + folder + " to " + drive + results + target + " as " + newfname)
    log_output.write("\n" + "Moved " + folder + " to: ** " + target + " **" + " as " + newfname)
    counter += 1
    
print(str(tally) + ' files processed ... ALL DONE')
log_output.write("\n" + str(tally) + " files processed.")
log_output.close()
And this work when we want to move a lot of folders into folders (max 255 folders per folder) However I need to work on Files directly, as per example to have 10.000 files and to split into folders with max 255 files each, like the code do for the folders.

At the moment the script work like this, example of 1.000 folders: that folders are automatically splitted in 4 folders (255, 255, 255, 235)

I would like to have the same per files, in example if we have 1.000 files, I would like to split to 4 folders (255, 255, 255, 235 files per each one principal folder)

While I'm totally newbie to Python, I hope someone should let me know what to change in code. Many thanks.

I just tried to modify any 'folder' entry in code with 'files' no errors here but no folders were created.
Reply
#2
Can try this i have modify code to use pathlib and fstring for a more modern Python approach.
I have tested with 5 files spilt and that work,also it make new folders with 5 files in each,you set 255.
from pathlib import Path
from shutil import move

# Get the current working directory as a Path object
wd = Path.cwd()
files = [f for f in wd.iterdir() if f.is_file()]
lastitemindex = len(files) - 1
# Setup output directory and parameters
results = Path(wd.drive) / "c64Romset_output"
filesperfolder = 5 # My test set 255
letterstodisplay = 15
# Get the first and last file names for the initial folder name
firstfn_2l = files[0].name[:letterstodisplay].split("(")[0].strip().upper()[:4]
lastfn_2l = files[:filesperfolder - 1][-1].name[:letterstodisplay].split("(")[0].strip().upper()[:4]

# Create the initial target folder
firsttarget = f"{firstfn_2l} to {lastfn_2l}".strip()
(results / firsttarget).mkdir(parents=True, exist_ok=True)
log_output = (results / "log_output.txt").open("w+")
tally = 0
counter = 0
target = firsttarget

for file in files:
    tally += 1
    # Create a new folder (reached filesperfolder limit)
    if counter == filesperfolder:
        p1 = file.name[:letterstodisplay].split("(")[0].upper().strip()[:4]
        filepos = files.index(file)
        try:
            p2 = files[filepos + filesperfolder - 1].name[:letterstodisplay].split("(")[0].upper().strip()[:4]
        except IndexError:
            p2 = files[lastitemindex].name[:letterstodisplay].split("(")[0].upper().strip()[:4]
        newdir = f"{p1} to {p2}".strip()
        print(f"{tally} files processed ... making new dir called: {newdir}")
        (results / newdir).mkdir(exist_ok=True)
        target = newdir
        counter = 0

    # Move the file to the target folder
    newfname = file.name.split("(")[0].strip()
    move(file, results / target / newfname)
    print(f"Moved {file.name} to {results / target} as {newfname}")
    log_output.write(f"\nMoved {file.name} to: ** {target} ** as {newfname}")
    counter += 1

if __name__ == '__main__':
    print(f"{tally} files processed ... ALL DONE")
    log_output.write(f"\n{tally} files processed.")
    log_output.close()
Reply
#3
This code is terrible. Here is my improved version, starting from @snippsat 's version (UNTESTED)
from pathlib import Path
from shutil import move

# Get the current working directory as a Path object
wd = Path.cwd()
# Setup output directory and parameters
results = Path(wd.drive) / "c64Romset_output"
filesperfolder = 5  # My test set 255
letterstodisplay = 15
# split list of files into chunks
files = [f for f in wd.iterdir() if f.is_file()]
chunks = [files[i : i + filesperfolder] for i in range(0, len(files), filesperfolder)]


# function to shorten names
def short(name):
    return name[:letterstodisplay].split("(")[0].strip().upper()[:4]


log_output = (results / "log_output.txt").open("w+")

tally = 0
for files in chunks:
    target = f"{short(files[0].name)} to {short(files[-1].name)}".strip()
    print(f"{tally} files processed ... making new dir called: {target}")
    (results / target).mkdir(parents=True, exist_ok=True)
    for file in files:
        # Move the file to the target folder
        newfname = file.name.split("(")[0].strip()
        move(file, results / target / newfname)
        print(f"Moved {file.name} to {results / target} as {newfname}")
        log_output.write(f"\nMoved {file.name} to: ** {target} ** as {newfname}")
    tally += len(files)


if __name__ == "__main__":
    print(f"{tally} files processed ... ALL DONE")
    log_output.write(f"\n{tally} files processed.")
    log_output.close()
snippsat likes this post
« We can solve any problem by introducing an extra level of indirection »
Reply
#4
(Mar-01-2025, 09:26 AM)Gribouillis Wrote: This code is terrible. Here is my improved version, starting from @snippsat 's version (UNTESTED)
from pathlib import Path
from shutil import move

# Get the current working directory as a Path object
wd = Path.cwd()
# Setup output directory and parameters
results = Path(wd.drive) / "c64Romset_output"
filesperfolder = 5  # My test set 255
letterstodisplay = 15
# split list of files into chunks
files = [f for f in wd.iterdir() if f.is_file()]
chunks = [files[i : i + filesperfolder] for i in range(0, len(files), filesperfolder)]


# function to shorten names
def short(name):
    return name[:letterstodisplay].split("(")[0].strip().upper()[:4]


log_output = (results / "log_output.txt").open("w+")

tally = 0
for files in chunks:
    target = f"{short(files[0].name)} to {short(files[-1].name)}".strip()
    print(f"{tally} files processed ... making new dir called: {target}")
    (results / target).mkdir(parents=True, exist_ok=True)
    for file in files:
        # Move the file to the target folder
        newfname = file.name.split("(")[0].strip()
        move(file, results / target / newfname)
        print(f"Moved {file.name} to {results / target} as {newfname}")
        log_output.write(f"\nMoved {file.name} to: ** {target} ** as {newfname}")
    tally += len(files)


if __name__ == "__main__":
    print(f"{tally} files processed ... ALL DONE")
    log_output.write(f"\n{tally} files processed.")
    log_output.close()

Many thanks for the help (@snippsat too)
I created the py file, placed inside a folder (in this example c:/FileSplitter) which contains many files.
Launched the script (by cmd with admin rights) and I received this error:

Error:
C:\FileSplitter>filesplitter3.py Traceback (most recent call last): File "C:\FileSplitter\fileSplitter3.py", line 20, in <module> log_output = (results / "log_output.txt").open("w+") File "C:\Users\stefa\AppData\Local\Programs\Python\Python313\Lib\pathlib\_local.py", line 537, in open return io.open(self, mode, buffering, encoding, errors, newline) ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FileNotFoundError: [Errno 2] No such file or directory: 'C:c64Romset_output\\log_output.txt'
Reply
#5
(Mar-01-2025, 08:15 AM)snippsat Wrote: Can try this i have modify code to use pathlib and fstring for a more modern Python approach.
I have tested with 5 files spilt and that work,also it make new folders with 5 files in each,you set 255.
from pathlib import Path
from shutil import move

# Get the current working directory as a Path object
wd = Path.cwd()
files = [f for f in wd.iterdir() if f.is_file()]
lastitemindex = len(files) - 1
# Setup output directory and parameters
results = Path(wd.drive) / "c64Romset_output"
filesperfolder = 5 # My test set 255
letterstodisplay = 15
# Get the first and last file names for the initial folder name
firstfn_2l = files[0].name[:letterstodisplay].split("(")[0].strip().upper()[:4]
lastfn_2l = files[:filesperfolder - 1][-1].name[:letterstodisplay].split("(")[0].strip().upper()[:4]

# Create the initial target folder
firsttarget = f"{firstfn_2l} to {lastfn_2l}".strip()
(results / firsttarget).mkdir(parents=True, exist_ok=True)
log_output = (results / "log_output.txt").open("w+")
tally = 0
counter = 0
target = firsttarget

for file in files:
    tally += 1
    # Create a new folder (reached filesperfolder limit)
    if counter == filesperfolder:
        p1 = file.name[:letterstodisplay].split("(")[0].upper().strip()[:4]
        filepos = files.index(file)
        try:
            p2 = files[filepos + filesperfolder - 1].name[:letterstodisplay].split("(")[0].upper().strip()[:4]
        except IndexError:
            p2 = files[lastitemindex].name[:letterstodisplay].split("(")[0].upper().strip()[:4]
        newdir = f"{p1} to {p2}".strip()
        print(f"{tally} files processed ... making new dir called: {newdir}")
        (results / newdir).mkdir(exist_ok=True)
        target = newdir
        counter = 0

    # Move the file to the target folder
    newfname = file.name.split("(")[0].strip()
    move(file, results / target / newfname)
    print(f"Moved {file.name} to {results / target} as {newfname}")
    log_output.write(f"\nMoved {file.name} to: ** {target} ** as {newfname}")
    counter += 1

if __name__ == '__main__':
    print(f"{tally} files processed ... ALL DONE")
    log_output.write(f"\n{tally} files processed.")
    log_output.close()

Hi Snipspsat, many thanks for the help.
Your code does not give any error, and apparently works.
However some output folders contains 3/4/5/6 files, some others 1 file, and others many many files (over 100)...

I just tested a folder with over 550 files and created folders are 14 only.
Here the output:

Output:
Moved fileSplitter3.py to: ** FILE to PYRO ** as fileSplitter3.py Moved Postman Pat 1, 2, 3 (19xx)(Alternative)[h SG-Team '10].scl to: ** FILE to PYRO ** as Postman Pat 1, 2, 3 Moved Predator 1, 2 (19xx)(-)[h Slider '13].scl to: ** FILE to PYRO ** as Predator 1, 2 Moved Pyromania 1, 2 (19xx)(Amore, Gabriele)[h Tiboh '15].scl to: ** FILE to PYRO ** as Pyromania 1, 2 Moved Quazatron + Magnetron (19xx)(Graftgold)[h SB Soft, Thunder, Dagma '97].scl to: ** FILE to PYRO ** as Quazatron + Magnetron Moved Rambo 2 + Rambo 3 (19xx)(Ocean)[h SG '10].scl to: ** RAMB to REBE ** as Rambo 2 + Rambo 3 Moved Ramire the Vampire 1, 2, 3 (19xx)(Mojon Twins)[h Slider '13].scl to: ** RAMB to REBE ** as Ramire the Vampire 1, 2, 3 Moved Rebel Star 1, 2 (19xx)(Firebird)(RU)[h Agaev E.][tr ru].scl to: ** RAMB to REBE ** as Rebel Star 1, 2 Moved Rebel Star 1, 2 (19xx)(Firebird)(RU)[h Maslo V.][tr ru].scl to: ** RAMB to REBE ** as Rebel Star 1, 2 Moved Rebel Star 1, 2 (19xx)(Firebird)(RU)[h Merlin '98].scl to: ** RAMB to REBE ** as Rebel Star 1, 2 Moved Rebel Star 1, 2 (19xx)(Firebird)(RU)[h Power of Sound '95, Stars of Keladan '96].scl to: ** REBE to REPT ** as Rebel Star 1, 2 Moved Rebel Star 1, 2 (19xx)(Firebird)(RU)[h Power of Sound '95].scl to: ** REBE to REPT ** as Rebel Star 1, 2 Moved Renegade 1, 2, 3 (19xx)(Imagine)[h Stream Hackers '97].scl to: ** REBE to REPT ** as Renegade 1, 2, 3 Moved Repton 1, 2 (19xx)(Superior)[h BrokImSoft].scl to: ** REBE to REPT ** as Repton 1, 2 Moved Repton Mania (1989)(Superior)[h SG '11].scl to: ** REBE to REPT ** as Repton Mania Moved Rick Dangerous 1, 2 (19xx)(Micro Style)[h Alex Art '99].scl to: ** RICK to ROBO ** as Rick Dangerous 1, 2 Moved Rick Dangerous 1, 2 (19xx)(Micro Style)[h SG-Team '16].scl to: ** RICK to ROBO ** as Rick Dangerous 1, 2 Moved Rick Dangerous 1, 2 (19xx)(Micro Style)[h Slider '06].scl to: ** RICK to ROBO ** as Rick Dangerous 1, 2 Moved RoboCop 1, 2, 3 (19xx)(Ocean)[h Slider '15].scl to: ** RICK to ROBO ** as RoboCop 1, 2, 3 Moved Robot 1 - The Ship of Doom + The Planet of Death (2017)(Mat Recardo)[h Tiboh '17][t].scl to: ** RICK to ROBO ** as Robot 1 - The Ship of Doom + The Planet of Death Moved Saboteur 1, 2 (19xx)(Durell)(RU)[h Baxter][tr ru].scl to: ** SABO to SABO ** as Saboteur 1, 2 Moved Saboteur 1, 2 (19xx)(Durell)(RU)[h Brainwave].scl to: ** SABO to SABO ** as Saboteur 1, 2 Moved Saboteur 1, 2 (19xx)(Durell)(RU)[h Merlin '97].scl to: ** SABO to SABO ** as Saboteur 1, 2 Moved Saboteur 1, 2 (19xx)(Durell)(RU)[h Mortal Kombat Hackers Group '95].scl to: ** SABO to SABO ** as Saboteur 1, 2 Moved Saboteur 1, 2 (19xx)(Durell)(RU)[h SG '11].scl to: ** SABO to SABO ** as Saboteur 1, 2 Moved Scooby Doo Collection (1991)(-)[h Fist].scl to: ** SCOO to SEYM ** as Scooby Doo Collection Moved Scooby Doo Collection (1991)(-)[h SG '10].scl to: ** SCOO to SEYM ** as Scooby Doo Collection Moved Seto Taisho Special Edition (2017)(Monument Microgames).scl to: ** SCOO to SEYM ** as Seto Taisho Special Edition Moved Seymour - Arcade Games (19xx)(Code Masters)[h SG '10][t].scl to: ** SCOO to SEYM ** as Seymour - Arcade Games Moved Seymour's Quest Collection (19xx)(Code Masters)[h SG-Team '15].scl to: ** SCOO to SEYM ** as Seymour's Quest Collection Moved Sid Spanners 1, 2, 3, 4 (2011)(Digital Prawn)[h Tiboh '11].scl to: ** SID to SORC ** as Sid Spanners 1, 2, 3, 4 Moved Silicon Dreams - Trilogiya (1998)(Energy Minds).scl to: ** SID to SORC ** as Silicon Dreams - Trilogiya Moved Sir Ababol 1, 2 (19xx)(The Mojon Twins)[h Slider '15].scl to: ** SID to SORC ** as Sir Ababol 1, 2 Moved Smiler 1, 2, 3, 4, 5, 6 (2010)(Digital Prawn)[h Tiboh '11].scl to: ** SID to SORC ** as Smiler 1, 2, 3, 4, 5, 6 Moved Sorcery + Sorcery+ (19xx)(Virgin Games)[h Tiboh '16][t +2].scl to: ** SID to SORC ** as Sorcery + Sorcery+ Moved Speccies 1, 2 (2013)(Tardis Remakes)[h Slider '13].scl to: ** SPEC to STAR ** as Speccies 1, 2 Moved Speccy Jam 2014 (2014)(Tiboh).scl to: ** SPEC to STAR ** as Speccy Jam 2014 Moved Specimen 1,2 (1991)(Andrew J.Remic)[h BrokImSoft].scl to: ** SPEC to STAR ** as Specimen 1,2 Moved Spy vs Spy 1-3 (19xx)(Beyond)[h Tiboh '13].scl to: ** SPEC to STAR ** as Spy vs Spy 1-3 Moved Star Wars. Original Trilogy (2014)(Slider)(RU)(en)[t].scl to: ** SPEC to STAR ** as Star Wars. Original Trilogy Moved Starstrike 1, 2 (19xx)(Realtime Games)[h Tiboh '15].scl to: ** STAR to TEEN ** as Starstrike 1, 2 Moved Strider 1, 2 (19xx)(US Gold)[h Power Hackers Group '00].scl to: ** STAR to TEEN ** as Strider 1, 2 Moved Strider 1, 2 (19xx)(US Gold)[h SG-Team '16].scl to: ** STAR to TEEN ** as Strider 1, 2 Moved Syktyvkar - Kazan' Games 86 (2017)(eddison)(RU).scl to: ** STAR to TEEN ** as Syktyvkar - Kazan' Games 86 Moved Teenage Mutant Hero Turtles 1, 2 (19xx)(Image Works)[h SG '10].scl to: ** STAR to TEEN ** as Teenage Mutant Hero Turtles 1, 2 Moved Teenage Mutant Hero Turtles 1, 2 (19xx)(Image Works)[h Slavjack].scl to: ** TEEN to TRAP ** as Teenage Mutant Hero Turtles 1, 2 Moved Total Eclipse 1, 2 (19xx)(Incentive)[h Golden Max].scl to: ** TEEN to TRAP ** as Total Eclipse 1, 2 Moved Total Eclipse 1, 2 (19xx)(Incentive)[h KSA '94].scl to: ** TEEN to TRAP ** as Total Eclipse 1, 2 Moved Total Eclipse 1, 2 (19xx)(Incentive)[h Tankard].scl to: ** TEEN to TRAP ** as Total Eclipse 1, 2 Moved Trap Door + Through the Trap Door (1990)(Alternative)[h AMD][t][aka Trap Door Collection].scl to: ** TEEN to TRAP ** as Trap Door + Through the Trap Door Moved Trapdoor, The + Through the Trapdoor (19xx)(Piranha)[h Amiga Must Die, TomCaT '09].scl to: ** TRAP to TURR ** as Trapdoor, The + Through the Trapdoor Moved Trapdoor, The + Through the Trapdoor (19xx)(Piranha)[h SAW '95].scl to: ** TRAP to TURR ** as Trapdoor, The + Through the Trapdoor Moved Trapdoor, The + Through the Trapdoor (19xx)(Piranha)[h Slider '13].scl to: ** TRAP to TURR ** as Trapdoor, The + Through the Trapdoor Moved Turrican 1, 2 (19xx)(Rainbow Arts)[h Maslo V.].scl to: ** TRAP to TURR ** as Turrican 1, 2 Moved Turrican 1, 2 (19xx)(Rainbow Arts)[h Slider '09].scl to: ** TRAP to TURR ** as Turrican 1, 2 Moved Video Classics (1989)(Silverbird)[h BrokImSoft][aka Blip!].scl to: ** VIDE to WIWO ** as Video Classics Moved Vortex-1 (19xx)(Megafire).scl to: ** VIDE to WIWO ** as Vortex-1 Moved Vortex-2 (19xx)(Megafire).scl to: ** VIDE to WIWO ** as Vortex-2 Moved Willy The Wasp 1, 2 (2014)(Davey Sludge)[h Debris '15].scl to: ** VIDE to WIWO ** as Willy The Wasp 1, 2 Moved Wiwo Dido 1, 2, 3 (2011)(YRS)[h Tiboh '13].scl to: ** VIDE to WIWO ** as Wiwo Dido 1, 2, 3 Moved Wolf 2&3 (1999)(Z-Zero Systems)(RU).scl to: ** WOLF to ZBLA ** as Wolf 2&3 Moved X-Files 1, 2 (1999)(Upsoft)(RU).scl to: ** WOLF to ZBLA ** as X-Files 1, 2 Moved Yankee (1987)(CCS)[h Flash].scl to: ** WOLF to ZBLA ** as Yankee Moved Yie Ar Kung-Fu 1, 2 (19xx)(Imagine)[h Slider '17].scl to: ** WOLF to ZBLA ** as Yie Ar Kung-Fu 1, 2 Moved Zblast SD+ (2003)(Marks, Russell)(128K)[h Triumph][t].scl to: ** WOLF to ZBLA ** as Zblast SD+ Moved ZX Chip Vologodonsk 001 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 001 Moved ZX Chip Vologodonsk 002 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 002 Moved ZX Chip Vologodonsk 003 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 003 Moved ZX Chip Vologodonsk 004 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 004 Moved ZX Chip Vologodonsk 005 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 005 Moved ZX Chip Vologodonsk 006 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 006 Moved ZX Chip Vologodonsk 007 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 007 Moved ZX Chip Vologodonsk 008 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 008 Moved ZX Chip Vologodonsk 009 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 009 Moved ZX Chip Vologodonsk 010 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 010 Moved ZX Chip Vologodonsk 011 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 011 Moved ZX Chip Vologodonsk 012 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 012 Moved ZX Chip Vologodonsk 013 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 013 Moved ZX Chip Vologodonsk 014 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 014 Moved ZX Chip Vologodonsk 015 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 015 Moved ZX Chip Vologodonsk 016 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 016 Moved ZX Chip Vologodonsk 017 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 017 Moved ZX Chip Vologodonsk 018 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 018 Moved ZX Chip Vologodonsk 019 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 019 Moved ZX Chip Vologodonsk 020 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 020 Moved ZX Chip Vologodonsk 021 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 021 Moved ZX Chip Vologodonsk 022 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 022 Moved ZX Chip Vologodonsk 023 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 023 Moved ZX Chip Vologodonsk 024 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 024 Moved ZX Chip Vologodonsk 025 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 025 Moved ZX Chip Vologodonsk 026 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 026 Moved ZX Chip Vologodonsk 027 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 027 Moved ZX Chip Vologodonsk 028 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 028 Moved ZX Chip Vologodonsk 029 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 029 Moved ZX Chip Vologodonsk 030 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 030 Moved ZX Chip Vologodonsk 031 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 031 Moved ZX Chip Vologodonsk 032 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 032 Moved ZX Chip Vologodonsk 033 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 033 Moved ZX Chip Vologodonsk 034 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 034 Moved ZX Chip Vologodonsk 035 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 035 Moved ZX Chip Vologodonsk 036 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 036 Moved ZX Chip Vologodonsk 037 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 037 Moved ZX Chip Vologodonsk 038 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 038 Moved ZX Chip Vologodonsk 039 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 039 Moved ZX Chip Vologodonsk 040 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 040 Moved ZX Chip Vologodonsk 041 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 041 Moved ZX Chip Vologodonsk 042 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 042 Moved ZX Chip Vologodonsk 043 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 043 Moved ZX Chip Vologodonsk 044 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 044 Moved ZX Chip Vologodonsk 045 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 045 Moved ZX Chip Vologodonsk 046 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 046 Moved ZX Chip Vologodonsk 047 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 047 Moved ZX Chip Vologodonsk 048 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 048 Moved ZX Chip Vologodonsk 049 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 049 Moved ZX Chip Vologodonsk 050 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 050 Moved ZX Chip Vologodonsk 051 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 051 Moved ZX Chip Vologodonsk 052 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 052 Moved ZX Chip Vologodonsk 053 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 053 Moved ZX Chip Vologodonsk 054 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 054 Moved ZX Chip Vologodonsk 055 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 055 Moved ZX Chip Vologodonsk 056 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 056 Moved ZX Chip Vologodonsk 057 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 057 Moved ZX Chip Vologodonsk 058 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 058 Moved ZX Chip Vologodonsk 059 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 059 Moved ZX Chip Vologodonsk 060 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 060 Moved ZX Chip Vologodonsk 061 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 061 Moved ZX Chip Vologodonsk 062 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 062 Moved ZX Chip Vologodonsk 063 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 063 Moved ZX Chip Vologodonsk 064 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 064 Moved ZX Chip Vologodonsk 065 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 065 Moved ZX Chip Vologodonsk 066 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 066 Moved ZX Chip Vologodonsk 067 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 067 Moved ZX Chip Vologodonsk 068 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 068 Moved ZX Chip Vologodonsk 069 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 069 Moved ZX Chip Vologodonsk 070 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 070 Moved ZX Chip Vologodonsk 071 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 071 Moved ZX Chip Vologodonsk 072 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 072 Moved ZX Chip Vologodonsk 073 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 073 Moved ZX Chip Vologodonsk 074 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 074 Moved ZX Chip Vologodonsk 075 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 075 Moved ZX Chip Vologodonsk 076 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 076 Moved ZX Chip Vologodonsk 077 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 077 Moved ZX Chip Vologodonsk 078 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 078 Moved ZX Chip Vologodonsk 079 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 079 Moved ZX Chip Vologodonsk 080 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 080 Moved ZX Chip Vologodonsk 081 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 081 Moved ZX Chip Vologodonsk 082 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 082 Moved ZX Chip Vologodonsk 083 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 083 Moved ZX Chip Vologodonsk 084 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 084 Moved ZX Chip Vologodonsk 085 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 085 Moved ZX Chip Vologodonsk 086 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 086 Moved ZX Chip Vologodonsk 087 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 087 Moved ZX Chip Vologodonsk 088 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 088 Moved ZX Chip Vologodonsk 089 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 089 Moved ZX Chip Vologodonsk 090 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 090 Moved ZX Chip Vologodonsk 091 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 091 Moved ZX Chip Vologodonsk 092 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 092 Moved ZX Chip Vologodonsk 093 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 093 Moved ZX Chip Vologodonsk 094 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 094 Moved ZX Chip Vologodonsk 095 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 095 Moved ZX Chip Vologodonsk 096 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 096 Moved ZX Chip Vologodonsk 097 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 097 Moved ZX Chip Vologodonsk 098 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 098 Moved ZX Chip Vologodonsk 099 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 099 Moved ZX Chip Vologodonsk 100 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 100 Moved ZX Chip Vologodonsk 101 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 101 Moved ZX Chip Vologodonsk 102 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 102 Moved ZX Chip Vologodonsk 103 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 103 Moved ZX Chip Vologodonsk 104 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 104 Moved ZX Chip Vologodonsk 105 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 105 Moved ZX Chip Vologodonsk 106 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 106 Moved ZX Chip Vologodonsk 107 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 107 Moved ZX Chip Vologodonsk 108 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 108 Moved ZX Chip Vologodonsk 109 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 109 Moved ZX Chip Vologodonsk 110 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 110 Moved ZX Chip Vologodonsk 111 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 111 Moved ZX Chip Vologodonsk 112 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 112 Moved ZX Chip Vologodonsk 113 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 113 Moved ZX Chip Vologodonsk 114 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 114 Moved ZX Chip Vologodonsk 115 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 115 Moved ZX Chip Vologodonsk 116 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 116 Moved ZX Chip Vologodonsk 117 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 117 Moved ZX Chip Vologodonsk 118 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 118 Moved ZX Chip Vologodonsk 119 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 119 Moved ZX Chip Vologodonsk 120 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 120 Moved ZX Chip Vologodonsk 121 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 121 Moved ZX Chip Vologodonsk 122 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 122 Moved ZX Chip Vologodonsk 123 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 123 Moved ZX Chip Vologodonsk 124 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 124 Moved ZX Chip Vologodonsk 125 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 125 Moved ZX Chip Vologodonsk 126 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 126 Moved ZX Chip Vologodonsk 127 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 127 Moved ZX Chip Vologodonsk 128 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 128 Moved ZX Chip Vologodonsk 129 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 129 Moved ZX Chip Vologodonsk 130 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 130 Moved ZX Chip Vologodonsk 131 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 131 Moved ZX Chip Vologodonsk 132 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 132 Moved ZX Chip Vologodonsk 133 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 133 Moved ZX Chip Vologodonsk 134 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 134 Moved ZX Chip Vologodonsk 135 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 135 Moved ZX Chip Vologodonsk 136 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 136 Moved ZX Chip Vologodonsk 137 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 137 Moved ZX Chip Vologodonsk 138 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 138 Moved ZX Chip Vologodonsk 139 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 139 Moved ZX Chip Vologodonsk 140 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 140 Moved ZX Chip Vologodonsk 141 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 141 Moved ZX Chip Vologodonsk 142 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 142 Moved ZX Chip Vologodonsk 143 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 143 Moved ZX Chip Vologodonsk 144 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 144 Moved ZX Chip Vologodonsk 145 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 145 Moved ZX Chip Vologodonsk 146 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 146 Moved ZX Chip Vologodonsk 147 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 147 Moved ZX Chip Vologodonsk 148 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 148 Moved ZX Chip Vologodonsk 149 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 149 Moved ZX Chip Vologodonsk 150 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 150 Moved ZX Chip Vologodonsk 151 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 151 Moved ZX Chip Vologodonsk 152 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 152 Moved ZX Chip Vologodonsk 153 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 153 Moved ZX Chip Vologodonsk 154 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 154 Moved ZX Chip Vologodonsk 155 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 155 Moved ZX Chip Vologodonsk 156 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 156 Moved ZX Chip Vologodonsk 157 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 157 Moved ZX Chip Vologodonsk 158 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 158 Moved ZX Chip Vologodonsk 159 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 159 Moved ZX Chip Vologodonsk 160 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 160 Moved ZX Chip Vologodonsk 161 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 161 Moved ZX Chip Vologodonsk 162 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 162 Moved ZX Chip Vologodonsk 163 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 163 Moved ZX Chip Vologodonsk 164 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 164 Moved ZX Chip Vologodonsk 165 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 165 Moved ZX Chip Vologodonsk 166 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 166 Moved ZX Chip Vologodonsk 167 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 167 Moved ZX Chip Vologodonsk 168 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 168 Moved ZX Chip Vologodonsk 169 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 169 Moved ZX Chip Vologodonsk 170 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 170 Moved ZX Chip Vologodonsk 171 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 171 Moved ZX Chip Vologodonsk 172 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 172 Moved ZX Chip Vologodonsk 173 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 173 Moved ZX Chip Vologodonsk 174 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 174 Moved ZX Chip Vologodonsk 175 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 175 Moved ZX Chip Vologodonsk 176 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 176 Moved ZX Chip Vologodonsk 177 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 177 Moved ZX Chip Vologodonsk 178 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 178 Moved ZX Chip Vologodonsk 179 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 179 Moved ZX Chip Vologodonsk 180 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 180 Moved ZX Chip Vologodonsk 181 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 181 Moved ZX Chip Vologodonsk 182 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 182 Moved ZX Chip Vologodonsk 183 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 183 Moved ZX Chip Vologodonsk 184 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 184 Moved ZX Chip Vologodonsk 185 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 185 Moved ZX Chip Vologodonsk 186 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 186 Moved ZX Chip Vologodonsk 187 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 187 Moved ZX Chip Vologodonsk 188 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 188 Moved ZX Chip Vologodonsk 189 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 189 Moved ZX Chip Vologodonsk 190 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 190 Moved ZX Chip Vologodonsk 191 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 191 Moved ZX Chip Vologodonsk 192 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 192 Moved ZX Chip Vologodonsk 193 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 193 Moved ZX Chip Vologodonsk 194 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 194 Moved ZX Chip Vologodonsk 195 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 195 Moved ZX Chip Vologodonsk 196 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 196 Moved ZX Chip Vologodonsk 197 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 197 Moved ZX Chip Vologodonsk 198 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 198 Moved ZX Chip Vologodonsk 199 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 199 Moved ZX Chip Vologodonsk 200 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 200 Moved ZX Chip Vologodonsk 201 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 201 Moved ZX Chip Vologodonsk 202 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 202 Moved ZX Chip Vologodonsk 203 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 203 Moved ZX Chip Vologodonsk 204 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 204 Moved ZX Chip Vologodonsk 205 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 205 Moved ZX Chip Vologodonsk 206 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 206 Moved ZX Chip Vologodonsk 207 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 207 Moved ZX Chip Vologodonsk 208 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 208 Moved ZX Chip Vologodonsk 209 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 209 Moved ZX Chip Vologodonsk 210 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 210 Moved ZX Chip Vologodonsk 211 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 211 Moved ZX Chip Vologodonsk 212 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 212 Moved ZX Chip Vologodonsk 213 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 213 Moved ZX Chip Vologodonsk 214 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 214 Moved ZX Chip Vologodonsk 215 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 215 Moved ZX Chip Vologodonsk 216 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 216 Moved ZX Chip Vologodonsk 217 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 217 Moved ZX Chip Vologodonsk 218 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 218 Moved ZX Chip Vologodonsk 219 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 219 Moved ZX Chip Vologodonsk 220 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 220 Moved ZX Chip Vologodonsk 221 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 221 Moved ZX Chip Vologodonsk 222 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 222 Moved ZX Chip Vologodonsk 223 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 223 Moved ZX Chip Vologodonsk 224 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 224 Moved ZX Chip Vologodonsk 225 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 225 Moved ZX Chip Vologodonsk 226 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 226 Moved ZX Chip Vologodonsk 227 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 227 Moved ZX Chip Vologodonsk 228 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 228 Moved ZX Chip Vologodonsk 229 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 229 Moved ZX Chip Vologodonsk 230 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 230 Moved ZX Chip Vologodonsk 231 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 231 Moved ZX Chip Vologodonsk 232 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 232 Moved ZX Chip Vologodonsk 233 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 233 Moved ZX Chip Vologodonsk 234 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 234 Moved ZX Chip Vologodonsk 235 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 235 Moved ZX Chip Vologodonsk 236 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 236 Moved ZX Chip Vologodonsk 237 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 237 Moved ZX Chip Vologodonsk 238 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 238 Moved ZX Chip Vologodonsk 239 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 239 Moved ZX Chip Vologodonsk 240 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 240 Moved ZX Chip Vologodonsk 241 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 241 Moved ZX Chip Vologodonsk 242 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 242 Moved ZX Chip Vologodonsk 243 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 243 Moved ZX Chip Vologodonsk 244 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 244 Moved ZX Chip Vologodonsk 245 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 245 Moved ZX Chip Vologodonsk 246 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 246 Moved ZX Chip Vologodonsk 247 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 247 Moved ZX Chip Vologodonsk 248 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 248 Moved ZX Chip Vologodonsk 249 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 249 Moved ZX Chip Vologodonsk 250 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 250 Moved ZX Chip Vologodonsk 251 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 251 Moved ZX Chip Vologodonsk 252 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 252 Moved ZX Chip Vologodonsk 253 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 253 Moved ZX Chip Vologodonsk 254 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 254 Moved ZX Chip Vologodonsk 255 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 255 Moved ZX Chip Vologodonsk 256 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 256 Moved ZX Chip Vologodonsk 257 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 257 Moved ZX Chip Vologodonsk 258 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 258 Moved ZX Chip Vologodonsk 259 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 259 Moved ZX Chip Vologodonsk 260 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 260 Moved ZX Chip Vologodonsk 261 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 261 Moved ZX Chip Vologodonsk 262 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 262 Moved ZX Chip Vologodonsk 263 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 263 Moved ZX Chip Vologodonsk 264 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 264 Moved ZX Chip Vologodonsk 265 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 265 Moved ZX Chip Vologodonsk 266 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 266 Moved ZX Chip Vologodonsk 267 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 267 Moved ZX Chip Vologodonsk 268 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 268 Moved ZX Chip Vologodonsk 269 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 269 Moved ZX Chip Vologodonsk 270 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 270 Moved ZX Chip Vologodonsk 271 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 271 Moved ZX Chip Vologodonsk 272 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 272 Moved ZX Chip Vologodonsk 273 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 273 Moved ZX Chip Vologodonsk 274 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 274 Moved ZX Chip Vologodonsk 275 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 275 Moved ZX Chip Vologodonsk 276 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 276 Moved ZX Chip Vologodonsk 277 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 277 Moved ZX Chip Vologodonsk 278 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 278 Moved ZX Chip Vologodonsk 279 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 279 Moved ZX Chip Vologodonsk 281 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 281 Moved ZX Chip Vologodonsk 282 (19xx)(-)(RU)(en).scl to: ** ZX C to ZX C ** as ZX Chip Vologodonsk 282
Reply
#6
(Mar-01-2025, 10:58 AM)Guybrush16bit Wrote: Launched the script (by cmd with admin rights) and I received this error:
This is very strange. Did you modify the line
results = Path(wd.drive) / "c64Romset_output" ?
or any other line?
« We can solve any problem by introducing an extra level of indirection »
Reply
#7
(Mar-01-2025, 12:11 PM)Gribouillis Wrote:
(Mar-01-2025, 10:58 AM)Guybrush16bit Wrote: Launched the script (by cmd with admin rights) and I received this error:
This is very strange. Did you modify the line
results = Path(wd.drive) / "c64Romset_output" ?
or any other line?

Nope :-(
Reply
#8
(Mar-01-2025, 12:46 PM)Guybrush16bit Wrote: Nope :-(
Then I don't understand the error, because there are exactly the same lines in snippsat's code and you say that it works in his code.
« We can solve any problem by introducing an extra level of indirection »
Reply
#9
(Mar-01-2025, 12:59 PM)Gribouillis Wrote:
(Mar-01-2025, 12:46 PM)Guybrush16bit Wrote: Nope :-(
Then I don't understand the error, because there are exactly the same lines in snippsat's code and you say that it works in his code.

lol I really would like to understand the error, however Python is too new for me...I understand about 30% of this code...
Reply
#10
The folder naming seems to work initially but fails to update correctly after a certain poin,especially with the ZX Chip Vologodonsk files.
The counter variable might not be resetting properly after each folder is created.
Fix counter so it reset to 0 after every filesperfolder files, ensuring a new folder is created consistently.
from pathlib import Path
from shutil import move

# Get the current working directory as a Path object
wd = Path.cwd()
files = [f for f in wd.iterdir() if f.is_file()]
lastitemindex = len(files) - 1
results = Path(wd.drive) / "/c64Romset_output"
filesperfolder = 5  # Set to 5 for testing; adjust as needed
letterstodisplay = 15
results.mkdir(parents=True, exist_ok=True)

# Open log file
log_output = (results / "log_output.txt").open("w+")
tally = 0
counter = 0
folder_index = 0
for i, file in enumerate(files):
    tally += 1
    # Create a new folder (reached filesperfolder limit)
    if counter == 0:
        start_idx = i
        end_idx = min(i + filesperfolder - 1, lastitemindex)
        firstfn_2l = files[start_idx].name[:letterstodisplay].split("(")[0].strip().upper()[:4]
        lastfn_2l = files[end_idx].name[:letterstodisplay].split("(")[0].strip().upper()[:4]
        target = f"{firstfn_2l} to {lastfn_2l}".strip()
        (results / target).mkdir(exist_ok=True)
        print(f"Created new directory: {target}")

    # Move the file to the target folder
    newfname = file.name.split("(")[0].strip()
    move(file, results / target / newfname)
    print(f"Moved {file.name} to {results / target} as {newfname}")
    log_output.write(f"\nMoved {file.name} to: ** {target} ** as {newfname}")
    counter += 1
    # Reset counter and prepare for the next folder
    if counter == filesperfolder:
        counter = 0
        folder_index += 1

if __name__ == "__main__":
    print(f"{tally} files processed ... ALL DONE")
    log_output.write(f"\
Gribouillis code is better and work for me if i do one change.
from pathlib import Path
from shutil import move

# Get the current working directory as a Path object
wd = Path.cwd()
# Setup output directory and parameters
# add one /
results = Path(wd.drive) / "/c64Romset_output"
filesperfolder = 5  # My test set 255
letterstodisplay = 15
# split list of files into chunks
files = [f for f in wd.iterdir() if f.is_file()]
chunks = [files[i : i + filesperfolder] for i in range(0, len(files), filesperfolder)]

# function to shorten names
def short(name):
    return name[:letterstodisplay].split("(")[0].strip().upper()[:4]

log_output = (results / "log_output.txt").open("w+")

tally = 0
for files in chunks:
    target = f"{short(files[0].name)} to {short(files[-1].name)}".strip()
    print(f"{tally} files processed ... making new dir called: {target}")
    (results / target).mkdir(parents=True, exist_ok=True)
    for file in files:
        # Move the file to the target folder
        newfname = file.name.split("(")[0].strip()
        move(file, results / target / newfname)
        print(f"Moved {file.name} to {results / target} as {newfname}")
        log_output.write(f"\nMoved {file.name} to: ** {target} ** as {newfname}")
    tally += len(files)


if __name__ == "__main__":
    print(f"{tally} files processed ... ALL DONE")
    log_output.write(f"\n{tally} files processed.")
    log_output.close()
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Using zipfile module - finding folders not files darter1010 2 2,223 Apr-06-2024, 07:22 AM
Last Post: Pedroski55
  Create new folders and copy files cocobolli 3 4,597 Mar-22-2023, 10:23 AM
Last Post: Gribouillis
  Copy only hidden files and folders with rsync Cannondale 2 2,331 Mar-04-2023, 02:48 PM
Last Post: Cannondale
  python move folders and subfolders not working mg24 5 4,470 Nov-09-2022, 02:24 PM
Last Post: Larz60+
  Moving files to Folders giddyhead 13 12,579 Mar-07-2021, 02:50 AM
Last Post: giddyhead
  code to read files in folders and transfer the file name, type, date created to excel Divya577 0 2,436 Dec-06-2020, 04:14 PM
Last Post: Divya577
  Calling Variables from Other Files in Different Folders illmattic 14 9,969 Aug-01-2020, 07:02 PM
Last Post: deanhystad
  sub-folders in folders from text line jenost 1 2,156 Mar-31-2020, 07:16 AM
Last Post: ndc85430
  Python script that recursively zips folders WITHOUT nesting the folder inside the zip umkc1 1 4,531 Feb-11-2020, 09:12 PM
Last Post: michael1789
  Python Script to repeat Photoshop action in folders and subfolders silfer 2 5,669 Jul-25-2019, 03:12 PM
Last Post: silfer

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020