Add files via upload
This commit is contained in:
141
alpha/tool/group_files.py
Normal file
141
alpha/tool/group_files.py
Normal file
@@ -0,0 +1,141 @@
|
||||
import sys
|
||||
import os
|
||||
import subprocess
|
||||
|
||||
|
||||
# Set path of par2j
|
||||
client_path = "../par2j64.exe"
|
||||
|
||||
# Set path of file-list
|
||||
list_path = "../save/file-list.txt"
|
||||
|
||||
|
||||
# Return sub-process's ExitCode
|
||||
def command(cmd):
|
||||
ret = subprocess.run(cmd, shell=True)
|
||||
return ret.returncode
|
||||
|
||||
|
||||
# Return zero for empty folder
|
||||
def check_empty(path='.'):
|
||||
total = 0
|
||||
with os.scandir(path) as it:
|
||||
for entry in it:
|
||||
if entry.is_file():
|
||||
total += entry.stat().st_size
|
||||
elif entry.is_dir():
|
||||
total += check_empty(entry.path)
|
||||
if total > 0:
|
||||
break
|
||||
return total
|
||||
|
||||
|
||||
# Read arguments of command-line
|
||||
for idx, arg in enumerate(sys.argv[1:]):
|
||||
one_path = arg
|
||||
one_name = os.path.basename(one_path)
|
||||
|
||||
# Check the folder exists
|
||||
if os.path.isdir(one_path) == False:
|
||||
print(one_name + " isn't folder.")
|
||||
continue
|
||||
|
||||
# Check empty folder
|
||||
if check_empty(one_path) == 0:
|
||||
print(one_name + " is empty folder.")
|
||||
continue
|
||||
|
||||
print(one_name + " is folder.")
|
||||
|
||||
# Check the PAR file exists already
|
||||
par_path = one_path + "\\#1.par2"
|
||||
if os.path.exists(par_path):
|
||||
print(one_name + " includes PAR files already.")
|
||||
continue
|
||||
|
||||
# Create PAR file for each 1000 source files.
|
||||
group_index = 1
|
||||
file_count = 0
|
||||
error_level = 0
|
||||
|
||||
# Set options for par2j
|
||||
par_option = "/rr10 /rd2"
|
||||
|
||||
# Make file-list of source files in a folder
|
||||
f = open(list_path, 'w', encoding='utf-8')
|
||||
|
||||
# Search inner directories and files
|
||||
for cur_dir, dirs, files in os.walk(one_path):
|
||||
for file_name in files:
|
||||
# Ignore existing PAR2 files
|
||||
if file_name.lower().endswith('.par2'):
|
||||
continue
|
||||
|
||||
# Save filename and sub-directory
|
||||
file_path = os.path.join(os.path.relpath(cur_dir, one_path), file_name)
|
||||
if file_path.startswith('.\\'):
|
||||
file_path = os.path.basename(file_path)
|
||||
|
||||
#print("file name=", file_path)
|
||||
f.write(file_path)
|
||||
f.write('\n')
|
||||
file_count += 1
|
||||
|
||||
# If number of source files reaches 1000, create PAR file for them.
|
||||
if file_count >= 1000:
|
||||
f.close()
|
||||
#print("file_count=", file_count)
|
||||
par_path = one_path + "\\#" + str(group_index) + ".par2"
|
||||
|
||||
# Set command-line
|
||||
# Cover path by " for possible space
|
||||
# Specify source file by file-list
|
||||
cmd = "\"" + client_path + "\" c " + par_option + " /d\"" + one_path + "\" /fu \"" + par_path + "\" \"" + list_path + "\""
|
||||
|
||||
# Process the command
|
||||
print("Creating PAR files for group:", group_index)
|
||||
error_level = command(cmd)
|
||||
|
||||
# Check error
|
||||
# Exit loop, when error occur.
|
||||
if error_level > 0:
|
||||
print("Error=", error_level)
|
||||
break
|
||||
|
||||
# Set for next group
|
||||
group_index += 1
|
||||
file_count = 0
|
||||
f = open(list_path, 'w', encoding='utf-8')
|
||||
|
||||
# Exit loop, when error occur.
|
||||
if error_level > 0:
|
||||
break
|
||||
|
||||
# Finish file-list
|
||||
f.close()
|
||||
|
||||
# If there are source files still, create the last PAR file.
|
||||
#print("file_count=", file_count)
|
||||
if file_count > 0:
|
||||
par_path = one_path + "\\#" + str(group_index) + ".par2"
|
||||
cmd = "\"" + client_path + "\" c " + par_option + " /d\"" + one_path + "\" /fu \"" + par_path + "\" \"" + list_path + "\""
|
||||
|
||||
# Process the command
|
||||
print("Creating PAR files for group:", group_index)
|
||||
error_level = command(cmd)
|
||||
|
||||
# Check error
|
||||
# Exit loop, when error occur.
|
||||
if error_level > 0:
|
||||
print("Error=", error_level)
|
||||
break
|
||||
|
||||
elif group_index == 1:
|
||||
print(one_name + " doesn't contain source files.")
|
||||
|
||||
# Delete file-list after creation
|
||||
if (group_index > 1) or (file_count > 0):
|
||||
os.remove(list_path)
|
||||
|
||||
# If you don't confirm result, comment out below line.
|
||||
input('Press [Enter] key to continue . . .')
|
||||
Reference in New Issue
Block a user